اطلاعیه

Collapse
No announcement yet.

مشکل با DHT22

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

    مشکل با DHT22

    سلام
    دوستان یک دماسنج با DHT22 و AVR درست کردم ،ولی یه اشکال کوچولو داره واونم اینه که وقتی دما زیر 10 درجه بیاد، 99 رو نشون میده وهرچه دما پایینتر بیاد فرضا 7 یا 6 درجه دمای نمایش داده شده نیز کم میشود،درصورتی که برای دماهای بالای صفر دما رو خوب نمایش میده
    مشکل چی میتونه باشه؟برنامه به بان بسکام هست
    کد:
    $regfile = "m8adef.dat"
    $crystal = 8000000
    $hwstack = 40
    $swstack = 16
    $framesize = 32
    Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 4
      Enable Interrupts
      Enable Spi
      On Spi Ers
    
    
    Config Portb.5 = Output
    Config Portb.3 = Output
    Config Pinb.2 = Input
    Config Pinb.4 = Input
    Config Pinb.0 = Input
    Config Portc.0 = Output
    Config Portc.5 = Output
     Portc.0 = 1                        'DHT22 Data
    Config Timer0 = Timer , Prescale = 8
    
      Spiinit
    
    '.-------------------------------------------------------------------------------
    'Const Min_time = 95
    'Const Min_time = 48
    Const Min_time = 48
    '-------------------------------------------------------------------------------
    
    Dim C As Single
    Dim B(2) As Byte
    Dim Count As Byte
    Dim Signaltime(43) As Byte
    Dim Humidityw As Word
    Dim Temperaturew As Word
    Dim Humsens_chksum As Byte
    Dim Hum As String * 2
    Dim Dataout As String * 4
    Dim Temp As String * 2
    Dim Humiditys As String * 16
    Dim Temperatures As String * 16
     Dim Code As Byte
     Dim A As Byte
    Dim Strstring As String * 14
    Dim Ib As Byte
     Dim Info As Byte
    Dim I As Byte
    
    '-------------------------------------------------------------------------------
    Declare Sub Read_timings
    Declare Sub Humtemp_values
    
    Declare Function Compare_chksum(byval Hsens_humidity As Word , _
    Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte
     For I = 1 To 5
     Toggle Portc.5
     Waitms 150
     Next
     Portc.5 = 0
    
    Do
    
     Call Humtemp_values
    
      Humiditys = Str(humidityw)
      Temperatures = Str(temperaturew)
    
    Temp = Left(temperatures , 2)
    Hum = Left(humiditys , 2)
    B(1) = Val(temp)
    B(2) = Val(hum)
    Info = 113
    Portc.0 = 0
    Spdr = Info
    Waitms 100
    Portc.0 = 0
    Spdr = B(1)
    Waitms 100
    Info = 114
    Portc.0 = 0
    Spdr = Info
    Waitms 100
    Portc.0 = 0
    Spdr = B(2)
    
    Loop
    
    End
    '-------------------------------------------------------------------------------
    
    Sub Read_timings
    Wait 3
    
    
    
      Count = 1
    
      Config Pinb.0 = Output : Portb.0 = 0           ' request data
      Waitms 20                        ' wait 20 ms
      Config Pinb.0 = Input                  ' wait for data, receive data
    
      While Count < 43                     'collect 42 timings / signals
    
       Bitwait Pinb.0 , Set                 'signal goes high > start timer
       Start Timer0
       Bitwait Pinb.0 , Reset                'signal goes low > stop timer
       Stop Timer0
       Signaltime(count) = Tcnt0               'store number of ticks per signal in Signaltime byte
    
       Tcnt0 = 0
       Incr Count
    
     Wend
    
    
    End Sub
    
    '############################################## Humidity and temperature values
    
    Sub Humtemp_values
    
      Local X As Byte
    
      Humidityw = 0
      Temperaturew = 0
      Humsens_chksum = 0
    
      Call Read_timings
    
      For Count = 3 To 42                   ' skip first two
    
       Select Case Count
    
         Case 3 To 18
          X = 18 - Count
          If Signaltime(count) > Min_time Then Toggle Humidityw.x
    
         Case 19 To 34
          X = 34 - Count
          If Signaltime(count) > Min_time Then Toggle Temperaturew.x
    
         Case 34 To 42
          X = 42 - Count
          If Signaltime(count) > Min_time Then Toggle Humsens_chksum.x
    
       End Select
    
     Next
    
    End Sub
    
    '######################### Calculate Checksum and compare with trasnmitted value
    
    
    Function Compare_chksum(byval Hsens_humidity As Word , Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte
    
      Local Chksum As Byte
    
      Chksum = Low(hsens_humidity ) + High(hsens_humidity )
      Chksum = Chksum + Low(hsens_temperature)
      Chksum = Chksum + High(hsens_temperature)
    
      If Chksum = Hsens_chksum Then
       Compare_chksum = 1
      Else
       Compare_chksum = 0
      End If
    
    End Function
            Ers:
            Portd.0 = 1
    
            Return

    #2
    پاسخ : مشکل با DHT22

    نوشته اصلی توسط میثم قاسمی نیا
    سلام
    دوستان یک دماسنج با DHT22 و AVR درست کردم ،ولی یه اشکال کوچولو داره واونم اینه که وقتی دما زیر 10 درجه بیاد، 99 رو نشون میده وهرچه دما پایینتر بیاد فرضا 7 یا 6 درجه دمای نمایش داده شده نیز کم میشود،درصورتی که برای دماهای بالای صفر دما رو خوب نمایش میده
    مشکل چی میتونه باشه؟برنامه به بان بسکام هست
    کد:
    $regfile = "m8adef.dat"
    $crystal = 8000000
    $hwstack = 40
    $swstack = 16
    $framesize = 32
    Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 4
      Enable Interrupts
      Enable Spi
      On Spi Ers
    
    
    Config Portb.5 = Output
    Config Portb.3 = Output
    Config Pinb.2 = Input
    Config Pinb.4 = Input
    Config Pinb.0 = Input
    Config Portc.0 = Output
    Config Portc.5 = Output
     Portc.0 = 1                        'DHT22 Data
    Config Timer0 = Timer , Prescale = 8
    
      Spiinit
    
    '.-------------------------------------------------------------------------------
    'Const Min_time = 95
    'Const Min_time = 48
    Const Min_time = 48
    '-------------------------------------------------------------------------------
    
    Dim C As Single
    Dim B(2) As Byte
    Dim Count As Byte
    Dim Signaltime(43) As Byte
    Dim Humidityw As Word
    Dim Temperaturew As Word
    Dim Humsens_chksum As Byte
    Dim Hum As String * 2
    Dim Dataout As String * 4
    Dim Temp As String * 2
    Dim Humiditys As String * 16
    Dim Temperatures As String * 16
     Dim Code As Byte
     Dim A As Byte
    Dim Strstring As String * 14
    Dim Ib As Byte
     Dim Info As Byte
    Dim I As Byte
    
    '-------------------------------------------------------------------------------
    Declare Sub Read_timings
    Declare Sub Humtemp_values
    
    Declare Function Compare_chksum(byval Hsens_humidity As Word , _
    Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte
     For I = 1 To 5
     Toggle Portc.5
     Waitms 150
     Next
     Portc.5 = 0
    
    Do
    
     Call Humtemp_values
    
      Humiditys = Str(humidityw)
      Temperatures = Str(temperaturew)
    
    Temp = Left(temperatures , 2)
    Hum = Left(humiditys , 2)
    B(1) = Val(temp)
    B(2) = Val(hum)
    Info = 113
    Portc.0 = 0
    Spdr = Info
    Waitms 100
    Portc.0 = 0
    Spdr = B(1)
    Waitms 100
    Info = 114
    Portc.0 = 0
    Spdr = Info
    Waitms 100
    Portc.0 = 0
    Spdr = B(2)
    
    Loop
    
    End
    '-------------------------------------------------------------------------------
    
    Sub Read_timings
    Wait 3
    
    
    
      Count = 1
    
      Config Pinb.0 = Output : Portb.0 = 0           ' request data
      Waitms 20                        ' wait 20 ms
      Config Pinb.0 = Input                  ' wait for data, receive data
    
      While Count < 43                     'collect 42 timings / signals
    
       Bitwait Pinb.0 , Set                 'signal goes high > start timer
       Start Timer0
       Bitwait Pinb.0 , Reset                'signal goes low > stop timer
       Stop Timer0
       Signaltime(count) = Tcnt0               'store number of ticks per signal in Signaltime byte
    
       Tcnt0 = 0
       Incr Count
    
     Wend
    
    
    End Sub
    
    '############################################## Humidity and temperature values
    
    Sub Humtemp_values
    
      Local X As Byte
    
      Humidityw = 0
      Temperaturew = 0
      Humsens_chksum = 0
    
      Call Read_timings
    
      For Count = 3 To 42                   ' skip first two
    
       Select Case Count
    
         Case 3 To 18
          X = 18 - Count
          If Signaltime(count) > Min_time Then Toggle Humidityw.x
    
         Case 19 To 34
          X = 34 - Count
          If Signaltime(count) > Min_time Then Toggle Temperaturew.x
    
         Case 34 To 42
          X = 42 - Count
          If Signaltime(count) > Min_time Then Toggle Humsens_chksum.x
    
       End Select
    
     Next
    
    End Sub
    
    '######################### Calculate Checksum and compare with trasnmitted value
    
    
    Function Compare_chksum(byval Hsens_humidity As Word , Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte
    
      Local Chksum As Byte
    
      Chksum = Low(hsens_humidity ) + High(hsens_humidity )
      Chksum = Chksum + Low(hsens_temperature)
      Chksum = Chksum + High(hsens_temperature)
    
      If Chksum = Hsens_chksum Then
       Compare_chksum = 1
      Else
       Compare_chksum = 0
      End If
    
    End Function
            Ers:
            Portd.0 = 1
    
            Return
    سلام
    بازه زمان تغییر دما چقدر؟
    مثلا به یک باره 6 درجه میاد پایین؟
    با یه برنامه دیگه تست کنید و نتیجه رو بگید
    تو انجمن سرچ کنید میاد
    برد جوجه کشی:
    مطالعه پست 1 (حتما مطالعه کنید)


    مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

    دانلود

    توجه:
    این برد نیمه صنعتی و خانگی هست...
    برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

    آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

    دیدگاه


      #3
      پاسخ : مشکل با DHT22

      نوشته اصلی توسط mohammad...
      سلام
      بازه زمان تغییر دما چقدر؟
      مثلا به یک باره 6 درجه میاد پایین؟
      با یه برنامه دیگه تست کنید و نتیجه رو بگید
      تو انجمن سرچ کنید میاد
      سلام
      اینطور نیست،من دما ی محیط بیرون رو بصورت 24 ساعته ثبت می کنم ،وفقط وقتی دما یا رطوبت یا هردو به زیر 10 برسند،اون موقع ال سی دی عدد 99 رو نمایش میده وبا کم شدن بیشتر دما و رطوبت این عدد کم میشه

      دیدگاه


        #4
        پاسخ : مشکل با DHT22

        نوشته اصلی توسط میثم قاسمی نیا
        سلام
        اینطور نیست،من دما ی محیط بیرون رو بصورت 24 ساعته ثبت می کنم ،وفقط وقتی دما یا رطوبت یا هردو به زیر 10 برسند،اون موقع ال سی دی عدد 99 رو نمایش میده وبا کم شدن بیشتر دما و رطوبت این عدد کم میشه
        سلام
        شما فقط قسمت صحیح براتون مهمه؟
        قسمت اعشار رو که حذف کردین
        اشکال از برنامتون هست oo:
        برد جوجه کشی:
        مطالعه پست 1 (حتما مطالعه کنید)


        مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

        دانلود

        توجه:
        این برد نیمه صنعتی و خانگی هست...
        برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

        آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

        دیدگاه


          #5
          پاسخ : مشکل با DHT22

          نوشته اصلی توسط mohammad...
          سلام
          شما فقط قسمت صحیح براتون مهمه؟
          قسمت اعشار رو که حذف کردین
          اشکال از برنامتون هست oo:
          (اره قسمت اعشار رو حذف کردم ،خوب این چه مشکلی میتونه ایجاد کنه؟؟؟)
          .....تشکر مسئله رو گرفتم،یعنی وقتی دما یا رطوبت ما تک رقمی شد،با توجه به برنامه ازسمت چپ 2رقم رو جدا میکنه در واقع عدد اعشار نیز شامل عدد تک رقمی ما میشه وایجور یک عدد دو رقمی نمایش میده
          تشکر از راهنمایی شما

          دیدگاه


            #6
            پاسخ : مشکل با DHT22

            نوشته اصلی توسط میثم قاسمی نیا
            (اره قسمت اعشار رو حذف کردم ،خوب این چه مشکلی میتونه ایجاد کنه؟؟؟)
            .....تشکر مسئله رو گرفتم،یعنی وقتی دما یا رطوبت ما تک رقمی شد،با توجه به برنامه ازسمت چپ 2رقم رو جدا میکنه در واقع عدد اعشار نیز شامل عدد تک رقمی ما میشه وایجور یک عدد دو رقمی نمایش میده
            تشکر از راهنمایی شما
            سلام
            بله درسته از left استفاده کردی که در اینجور موارد نباید از left استفاده کنی

            اینم برنامه فقط اون قسمت دما و رطوبت رو با فرمت درست کردم و اون left رو حذف کردم موفق باشید

            [code=c]
            $regfile = "m8def.dat"
            $crystal = 8000000
            $hwstack = 40
            $swstack = 16
            $framesize = 32
            Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 4
            Enable Interrupts
            Enable Spi
            On Spi Ers

            Config Portb.5 = Output
            Config Portb.3 = Output
            Config Pinb.2 = Input
            Config Pinb.4 = Input
            Config Pinb.0 = Input
            Config Portc.0 = Output
            Config Portc.5 = Output
            Portc.0 = 1 'DHT22 Data
            Config Timer0 = Timer , Prescale = 8

            Spiinit

            '.-------------------------------------------------------------------------------
            'Const Min_time = 95
            'Const Min_time = 48
            Const Min_time = 48
            '-------------------------------------------------------------------------------

            Dim C As Single
            Dim B(2) As Byte
            Dim Count As Byte
            Dim Signaltime(43) As Byte
            Dim Humidityw As Word
            Dim Temperaturew As Integer
            Dim Humsens_chksum As Byte
            Dim Hum As String * 2
            Dim Dataout As String * 4
            Dim Temp As String * 2
            Dim Humiditys As String * 16
            Dim Temperatures As String * 16
            Dim Code As Byte
            Dim A As Byte
            Dim Strstring As String * 14
            Dim Ib As Byte
            Dim Info As Byte
            Dim I As Byte

            '-------------------------------------------------------------------------------
            Declare Sub Read_timings
            Declare Sub Humtemp_values

            Declare Function Compare_chksum(byval Hsens_humidity As Word , _
            Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte
            For I = 1 To 5
            Toggle Portc.5
            Waitms 150
            Next
            Portc.5 = 0

            Do

            Call Humtemp_values

            Humiditys = Str(humidityw)
            Humiditys = Format(humiditys , "0.0&quot
            Temperatures = Str(temperaturew)
            Temperatures = Format(temperatures , "0.0&quot
            If Temperaturew < 0 Then Temperatures = "0000"
            Temp = ""
            Hum = ""
            B(1) = Val(temperatures)
            B(2) = Val(humiditys)
            Info = 113
            Portc.0 = 0
            Spdr = Info
            Waitms 100
            Portc.0 = 0
            Spdr = B(1)
            Waitms 100
            Info = 114
            Portc.0 = 0
            Spdr = Info
            Waitms 100
            Portc.0 = 0
            Spdr = B(2)
            Loop

            End
            '-------------------------------------------------------------------------------

            Sub Read_timings
            Wait 1
            Count = 1

            Config Pinb.0 = Output : Portb.0 = 0 ' request data
            Waitms 20 ' wait 20 ms
            Config Pinb.0 = Input ' wait for data, receive data

            While Count < 43 'collect 42 timings / signals

            Bitwait Pinb.0 , Set 'signal goes high > start timer
            Start Timer0
            Bitwait Pinb.0 , Reset 'signal goes low > stop timer
            Stop Timer0
            Signaltime(count) = Tcnt0 'store number of ticks per signal in Signaltime byte

            Tcnt0 = 0
            Incr Count

            Wend


            End Sub

            '############################################ ## Humidity and temperature values

            Sub Humtemp_values

            Local X As Byte

            Humidityw = 0
            Temperaturew = 0
            Humsens_chksum = 0

            Call Read_timings

            For Count = 3 To 42 ' skip first two

            Select Case Count

            Case 3 To 18
            X = 18 - Count
            If Signaltime(count) > Min_time Then Toggle Humidityw.x

            Case 19 To 34
            X = 34 - Count
            If Signaltime(count) > Min_time Then Toggle Temperaturew.x

            Case 34 To 42
            X = 42 - Count
            If Signaltime(count) > Min_time Then Toggle Humsens_chksum.x

            End Select

            Next

            End Sub

            '######################### Calculate Checksum and compare with trasnmitted value


            Function Compare_chksum(byval Hsens_humidity As Word , Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte

            Local Chksum As Byte

            Chksum = Low(hsens_humidity ) + High(hsens_humidity )
            Chksum = Chksum + Low(hsens_temperature)
            Chksum = Chksum + High(hsens_temperature)

            If Chksum = Hsens_chksum Then
            Compare_chksum = 1
            Else
            Compare_chksum = 0
            End If

            End Function
            Ers:
            Portd.0 = 1

            Return
            [/code]
            برد جوجه کشی:
            مطالعه پست 1 (حتما مطالعه کنید)


            مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

            دانلود

            توجه:
            این برد نیمه صنعتی و خانگی هست...
            برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

            آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

            دیدگاه


              #7
              پاسخ : مشکل با DHT22

              سلام ببخشید من یه سوال داشتم نمیدونستم کجا مطرح کنم:
              من یه سنسور DHT22 دارم با یه مدار رطوبت سنج مدار اولش درست کار میکرد بعد نفهمیدم چی شد اتصالی داد مدار و میکروم سوخت حالا که میکرو رو عوض کردم سنسورم داغ میکنه و حتی این داغ کردن رو هم رو نمایشگر مشخصه
              آیا سنسورم سوخته؟

              دیدگاه

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