سلام
دوستان یک دماسنج با DHT22 و AVR درست کردم ،ولی یه اشکال کوچولو داره واونم اینه که وقتی دما زیر 10 درجه بیاد، 99 رو نشون میده وهرچه دما پایینتر بیاد فرضا 7 یا 6 درجه دمای نمایش داده شده نیز کم میشود،درصورتی که برای دماهای بالای صفر دما رو خوب نمایش میده
مشکل چی میتونه باشه؟برنامه به بان بسکام هست
دوستان یک دماسنج با 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
دیدگاه