با سلام
من یک تیکه کد دارم برای سنسور dht22 که برای ای سی مگا16 برنامه ریزی شده است و الان میخوام پین هاش را طوری تغییر بدهم که روی ای سی مگا8 کار کنه یک سری تغییرات در مورد پورت های ورودی و خروجی دادم ولی تاثیری نداشت! لطفا راهنمایی کنید!
کد اصلی برنامه:
کد تغییر داده شده: طبق شماتیک مدار (مگا8)
مداری مورد نظر برای تغییر پورت ها:

سپاس
من یک تیکه کد دارم برای سنسور dht22 که برای ای سی مگا16 برنامه ریزی شده است و الان میخوام پین هاش را طوری تغییر بدهم که روی ای سی مگا8 کار کنه یک سری تغییرات در مورد پورت های ورودی و خروجی دادم ولی تاثیری نداشت! لطفا راهنمایی کنید!
کد اصلی برنامه:
کد:
$regfile = "m16def.dat" $crystal = 8000000 'Const Min_time = 48 '$crystal = 16000000 'Const Min_time = 95 '$crystal = 11059200 'Const Min_time = 66 '------------------------------------------------------------------------------- Config Pind.0 = Input 'DHT22 Data Config Timer0 = Timer , Prescale = 8 '.------------------------------------------------------------------------------- 'Const Min_time = 95 Const Min_time = 48 'Const Min_time = 66 '------------------------------------------------------------------------------- Dim Count As Byte Dim Signaltime(43) As Byte Dim Humidityw As Word Dim Temperaturew As Word Dim Humsens_chksum As Byte Dim Humiditys As String * 16 Dim Temperatures As String * 16 Dim Strstring As String * 14 Dim Ib As Byte '------------------------------------------------------------------------------- Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Pina.2 , Db5 = Pina.3 , Db6 = Pina.4 , Db7 = Pina.5 , E = Pina.1 , Rs = Pina.0 Cursor Off Cls Cls Deflcdchar 0 , 14 , 10 , 14 , 32 , 32 , 32 , 32 , 32 ' replace ? with number (0-7) '------------------------------------------------------------------------------- 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 '------------------------------------------------------------------------------- Do Call Humtemp_values Humiditys = Str(humidityw) Temperatures = Str(temperaturew) Locate 1 , 1 Lcd "Humidity:" ; Format(humiditys , "0.0") ; " % " Lowerline Lcd "Temp:" ; Format(temperatures , "0.0") : Lcd " " : Lcd Chr(0) : Lcd "C" Waitms 100 Loop End '------------------------------------------------------------------------------- Sub Read_timings Wait 3 Count = 1 Config Pind.0 = Output : Portd.0 = 0 ' request data Waitms 20 ' wait 20 ms Config Pind.0 = Input ' wait for data, receive data While Count < 43 'collect 42 timings / signals Bitwait Pind.0 , Set 'signal goes high > start timer Start Timer0 Bitwait Pind.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 = "m8def.dat" $crystal = 8000000 'Const Min_time = 48 '$crystal = 16000000 'Const Min_time = 95 '$crystal = 11059200 'Const Min_time = 66 '------------------------------------------------------------------------------- Config Pind.6 = Input 'DHT22 Data Config Timer0 = Timer , Prescale = 8 '.------------------------------------------------------------------------------- 'Const Min_time = 95 Const Min_time = 48 'Const Min_time = 66 '------------------------------------------------------------------------------- Dim Count As Byte Dim Signaltime(43) As Byte Dim Humidityw As Word Dim Temperaturew As Word Dim Humsens_chksum As Byte Dim Humiditys As String * 16 Dim Temperatures As String * 16 Dim Strstring As String * 14 Dim Ib As Byte '------------------------------------------------------------------------------- Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7 , E = Pinb.2 , Rs = Pinb.0 Cursor Off Cls Cls Deflcdchar 0 , 14 , 10 , 14 , 32 , 32 , 32 , 32 , 32 ' replace ? with number (0-7) '------------------------------------------------------------------------------- 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 '------------------------------------------------------------------------------- Do Call Humtemp_values Humiditys = Str(humidityw) Temperatures = Str(temperaturew) Locate 1 , 1 Lcd "Humidity:" ; Format(humiditys , "0.0") ; " % " Lowerline Lcd "Temp:" ; Format(temperatures , "0.0") : Lcd " " : Lcd Chr(0) : Lcd "C" Waitms 100 Loop End '------------------------------------------------------------------------------- Sub Read_timings Wait 3 Count = 1 Config Pind.6 = Output : Portd.6 = 0 ' request data Waitms 20 ' wait 20 ms Config Pind.6 = Input ' wait for data, receive data While Count < 43 'collect 42 timings / signals Bitwait Pind.6 , Set 'signal goes high > start timer Start Timer0 Bitwait Pind.6 , 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
سپاس
دیدگاه