سلام
دوستان یک دماسنج با 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




oo:


دیدگاه