سلام دوستان
من یک مگا 8 دارم که دما و رطوبت رو با سنسور dht22 اندازه میگیره وبا ارتباط spi به مگا 32 می فرسته واونجا عملیات خاصی روش انجام میشه ...من میخوام دما ورطویت رو با هم بفرستم وتوی مگا 32 جداش کنم واستفاده ...اما گر شدنی نیست چطور میتونم جدا بفرستم که اطلاعاتم قاطی نشه؟؟؟
اسلیو:
مستر
من یک مگا 8 دارم که دما و رطوبت رو با سنسور dht22 اندازه میگیره وبا ارتباط spi به مگا 32 می فرسته واونجا عملیات خاصی روش انجام میشه ...من میخوام دما ورطویت رو با هم بفرستم وتوی مگا 32 جداش کنم واستفاده ...اما گر شدنی نیست چطور میتونم جدا بفرستم که اطلاعاتم قاطی نشه؟؟؟
اسلیو:
کد:
$regfile = "m8adef.dat"
$crystal = 8000000
$hwstack = 60
$swstack = 40
$framesize = 40
'-------------------------------------------------------------------------------
Config Spi = Hard , Interrupt = Off , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 4
Enable Spi
Spiinit
Config Pinb.0 = Input
Config Portc.0 = Output 'DHT22 Data
Config Timer0 = Timer , Prescale = 8
Dim X As Bit
X = 0
Dim Main As Byte
Main = 1
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Home
Lcd "wait...."
Wait 1
Cls
'.-------------------------------------------------------------------------------
'Const Min_time = 95
'Const Min_time = 48
Const Min_time = 48
'-------------------------------------------------------------------------------
Dim B As Single
Dim B1 As Byte
Dim E As Single
Dim E1 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 Hum1 As String * 4
Dim Temp1 As String * 4
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 Te As Byte
Dim Hu 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.0
Waitms 150
Next
Portc.0 = 0
Do
Call Humtemp_values
Humiditys = Str(humidityw)
Temperatures = Str(temperaturew)
Hum1 = Format(humiditys , "00.0")
Temp1 = Format(temperatures , "00.0")
B = Val(temp1)
B1 = Int(b)
E = Val(hum1)
E1 = Int(e)
Locate 1 , 1
Lcd B1
Locate 2 , 1
Lcd E1
Spiin B1 , 1
Spiin E1 , 1
Portc.0 = 1
Waitms 50
Portc.0 = 0
Loop
End
'-------------------------------------------------------------------------------
Sub Read_timings
Wait 2
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
کد:
$regfile = "m32def.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 Dim B As Byte Dim A As Byte Dim X As Bit X = 0 Dim Main As Byte Main = 1 Config Portb.0 = Output Dim Te As Byte Te = 113 Dim Hu As Byte Dim S As Byte Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 2 , Ce2 = 3 , Cd = 4 , Rd = 5 , Reset = 6 , Enable = 7 Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = No , Polarity = High , Phase = 0 , Clockrate = 4 Setfont Font8x8 Enable Interrupts Enable Spi On Spi Reci Cls Lcdat 4 , 1 , "HELLO WORLD" Wait 1 Spiinit Portb.0 = 1 Waitms 1000 Portb.0 = 0 Cls Showpic 96 , 0 , Temp , 0 Do Lcdat 2 , 80 , B Lcdat 2 , 1 , "humi:" ; A Lcdat 3 , 10 , S Spiout Te , 1 Loop End $include "font8x8.font" $lib "glcdks108.lbx" Reci: Spiin B , 1 Spiin A , 1 Incr S Return Temp: $bgf "tempo.bgf"


دیدگاه