تشریح عملکرد قسمت گیرنده مدار :
بر روی نمایشگر نوشته می شود سپس ورودی چک می شود و بهRF REMOTE RECIVERدر ابتدا عبارت محض اینکه دیتای ورودی 21 شد اجرای برنامه به برچسب منتقل میشود , تا وقتی ورودی برابر0RECIVE نشده اجرای برنامه در این قسمت متوقف می شود پس از 0 شدن ورودی 200 میلی ثانیه تاخیر ایجاد میشود سپس دیتای ورودی در متغیر . قرار داده می شودRECIVE-DATA .
شماتیک مدار گیرنده
برنامه اصلی مدار به زبان BASIC
$regfile = "M8DEF.DAT" $crystal = 8000000 Config Lcd = 16 * 4 Config Lcdpin = Pin , Db4 = Pind.0 , Db5 = Pind.1 , Db6 = Pind.3 , Db7 = Pind.4 , _ E = Pind.5 , Rs = Pind.6 Dim Lcd_data As String * 1 , X As Byte , Y As Byte , Rs As Byte Dim Cls_lcd As Bit , Recive_data As Byte , R1 As Byte , R2 As Byte , R As Byte Config Pinc.0 = Input Config Pinc.1 = Input Config Pinc.2 = Input Config Pinc.3 = Input Declare Sub Wireless_recive Declare Sub Message_code Declare Sub Synchronous_program ---------------------------------------------------------------------------------- Y=1:X =1 Cls : Home : Cursor Off Lcd "RF MESSAGE" Locate 2 , 1 : Lcd "RECIVER" -------------------------------------- Do Call Wireless_recive Waitms 50 Decr Recive_data If Recive_data = 12 Then Cls : Home Goto Recive End If Loop 'START OF RECIVE MESSAGE--------------------------------------------- Recive: Do Call Wireless_recive If Recive_data = 0 Then Goto Level1 Loop Level1: Waitms 200 Call Wireless_recive Decr Recive_data R1 = Recive_data Rs = R1 : Call Synchronous_program Do Call Wireless_recive If Recive_data = 0 Then Goto Level2 Loop ---------------------------------------------------------------------------------- Level2: Waitms 200 Call Wireless_recive Decr Recive_data R2 = Recive_data Rs = R2 : Call Synchronous_program Do Call Wireless_recive If Recive_data = 0 Then Goto Level3 Loop---------------------------------------------------------------------------------- Level3: R2 = R2 * 10 R = R1 + R2 Call Message_code ---------------------------------------------------------------------------------- If Cls_lcd = 1 Then Cls : Cls_lcd = 0 Y=1:X =1 End If ---------------------------------------------------------------------------------- Locate Y , X ---------------------------------------------------------------------------------- If Lcd_data = "$" Then Incr Y : X = 1 Goto Recive End If ---------------------------------------------------------------------------------- Lcd Lcd_data ---------------------------------------------------------------------------------- Incr X If X > 15 Then If Y = 4 Then Y = 4 : X = 15 Else X = 1 : Incr Y End If : End If ---------------------------------------------------------------------------------- Goto Recive 'END OF RECIVE MESSAGE---------------------------------------------- 'START OF WIRELESS_RECIVE SUB----------------------------------- Sub Wireless_recive: Recive_data = &B00001111 If Pinc.0 = 0 Then Recive_data = Recive_data And &B00001110 If Pinc.1 = 0 Then Recive_data = Recive_data And &B00001101 If Pinc.2 = 0 Then Recive_data = Recive_data And &B00001011 If Pinc.3 = 0 Then Recive_data = Recive_data And &B00000111 End Sub Wireless_recive Return 'END OF WIRELESS_RECIVE SUB-------------------------------------- 'START OF MESSAGE_CODE SUB--------------------------------------- Sub Message_code: Select Case R: Case Is = 0 : Lcd_data = "0" Case Is = 1 : Lcd_data = "1" Case Is = 2 : Lcd_data = "2" Case Is = 3 : Lcd_data = "3" Case Is = 4 : Lcd_data = "4" Case Is = 5 : Lcd_data = "5" Case Is = 6 : Lcd_data = "6" Case Is = 7 : Lcd_data = "7" Case Is = 8 : Lcd_data = "8" Case Is = 9 : Lcd_data = "9" Case Is = 10 : Lcd_data = "A" Case Is = 11 : Lcd_data = "B" Case Is = 12 : Lcd_data = "C" Case Is = 13 : Lcd_data = "D" Case Is = 14 : Lcd_data = "E" Case Is = 15 : Lcd_data = "F" Case Is = 16 : Lcd_data = "G" Case Is = 17 : Lcd_data = "H" Case Is = 18 : Lcd_data = "I" Case Is = 19 : Lcd_data = "J" Case Is = 20 : Lcd_data = "K" Case Is = 21 : Lcd_data = "L" Case Is = 22 : Lcd_data = "M" Case Is = 23 : Lcd_data = "N" Case Is = 24 : Lcd_data = "O" Case Is = 25 : Lcd_data = "P" Case Is = 26 : Lcd_data = "Q" Case Is = 27 : Lcd_data = "R" Case Is = 28 : Lcd_data = "S" Case Is = 29 : Lcd_data = "T" Case Is = 30 : Lcd_data = "U" Case Is = 31 : Lcd_data = "V" Case Is = 32 : Lcd_data = "W" Case Is = 33 : Lcd_data = "X" Case Is = 34 : Lcd_data = "Y" Case Is = 35 : Lcd_data = "Z" Case Is = 36 : Lcd_data = "$" Case Is = 37 : Lcd_data = "." Case Is = 38 : Lcd_data = " " End Select Return End Sub Message_code 'END OF MESSAGE_CODE SUB------------------------------------------- 'START OF Synchronous_program SUB-------------------------------- Sub Synchronous_program: If Rs = 12 Then Cls_lcd = 1 Do Call Wireless_recive If Recive_data = 0 Then Goto S1 Loop S1: Do Call Wireless_recive Waitms 50 Decr Recive_data If Recive_data = 12 Then Cls : Home Goto Recive End If Loop End If Return End Sub Synchronous_program
بلوک یک مدار گیرنده
تشریح عملکرد قسمت فرستنده مدار
برای هر کدام از کلید های مدار یک شمارنده در نظر گرفته شده که پس از هر بار فشار کلید یک واحد به
شمارنده اضافه میشود به عنوان مثال کلید CBA اگر بیش از 3 بار فشار دهیم شمارنده RESET میشود و
مقدار آن 0 است و با توجه به مقدار شمارنده رشته یا حرف مربوطه در متغیر LCD-DATA قرار می گیرد و رشته
مربوط پس از قرار گرفتن در متغیر LCD-DATA بر روی نمایش داده میشودLCD
جدول کد های ارسالی توسط KEYPAD
شماتیک فرستنده مدار
برنامه اصلی مدار به زبان BASIC
$regfile = "M8DEF.DAT"
$crystal = 8000000
Config Kbd = Portb , Debounce = 50 , Delay = 100
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Pinc.0 , Db5 = Pinc.1 , Db6 = Pinc.2 , Db7 = Pinc.3_
, E = Pinc.4 , Rs = Pinc.5
Dim Lcd_data As String * 1 , X As Byte , Y As Byte , Recive_data As Byte
Dim C1 As Byte , C2 As Byte , C3 As Byte , C4 As Byte , Code As String * 1
Dim C5 As Byte , C6 As Byte , C7 As Byte , C8 As Byte , S1 As String * 1
Dim C9 As Byte , C10 As Byte , C11 As Byte , C0 As Byte
Dim S(81) As String * 1 , Count As Byte , Send As Byte , S2 As String * 1
Dim X1_save As Byte , X2_save As Byte , X3_save As Byte , Send_data As Byte
Dim Synchronous_data As Byte , String_of_send_data As String * 2 , H As Byte
Config Portd = Output
Declare Sub Wireless_send
Declare Sub Message_code
Pt_power Alias Portd.5 : Pt_enable Alias Portd.7
----------------------------------------------------------------------------------
Cursor Off
Cls : Home
Lcd "PLEASE ENTER"
Locate 2 , 1
Lcd "YOUR MESSAGE"
Wait 1
Cls : Cursor On : Y = 1 : X = 1
'START OF WRITEING MESSAGE PROGRAM------------------------
H1:
Recive_data = Getkbd()
If Recive_data = 16 Then Goto H1
Select Case Recive_data:------------------------------------------------
Case Is = 0
Incr C0
If C0 = 1 Then Lcd_data = "0"
If C0 = 2 Then Lcd_data = "1"
If C0 = 3 Then Lcd_data = "2"
If C0 = 4 Then
C0 = 0 : Lcd_data = "3"
End If
----------------------------------------------------------------------------------
Case Is = 4
Incr C4
If C4 = 1 Then Lcd_data = "4"
If C4 = 2 Then Lcd_data = "5"
If C4 = 3 Then
C4 = 0 : Lcd_data = "6"
End If
----------------------------------------------------------------------------------
Case Is = 8
Incr C8
If C8 = 1 Then Lcd_data = "7"
If C8 = 2 Then Lcd_data = "8"
If C8 = 3 Then
C8 = 0 : Lcd_data = "9"
End If
----------------------------------------------------------------------------------
Case Is = 3
Incr C3
If C3 = 1 Then Lcd_data = "A"
If C3 = 2 Then Lcd_data = "B"
If C3 = 3 Then
C3 = 0 : Lcd_data = "C"
End If
----------------------------------------------------------------------------------
Case Is = 2
Incr C2
If C2 = 1 Then Lcd_data = "D"
If C2 = 2 Then Lcd_data = "E"
If C2 = 3 Then
C2 = 0 : Lcd_data = "F"
End If
----------------------------------------------------------------------------------
Case Is = 1
Incr C1
If C1 = 1 Then Lcd_data = "G"
If C1 = 2 Then Lcd_data = "H"
If C1 = 3 Then
C1 = 0 : Lcd_data = "I"
End If
----------------------------------------------------------------------------------
Case Is = 7
Incr C7
If C7 = 1 Then Lcd_data = "G"
If C7 = 2 Then Lcd_data = "H"
If C7 = 3 Then
C7 = 0 : Lcd_data = "I"
End If
----------------------------------------------------------------------------------
Case Is = 6
Incr C6
If C6 = 1 Then Lcd_data = "M"
If C6 = 2 Then Lcd_data = "N"
If C6 = 3 Then
C6 = 0 : Lcd_data = "O"
End If
----------------------------------------------------------------------------------
Case Is = 5
Incr C5
If C5 = 1 Then Lcd_data = "P"
If C5 = 2 Then Lcd_data = "Q"
If C5 = 3 Then
C5 = 0 : Lcd_data = "R"
End If
----------------------------------------------------------------------------------
Case Is = 11
Incr C11
If C11 = 1 Then Lcd_data = "S"
If C11 = 2 Then Lcd_data = "T"
If C11 = 3 Then
C11 = 0 : Lcd_data = "U"
End If
----------------------------------------------------------------------------------
Case Is = 10
Incr C10
If C10 = 1 Then Lcd_data = "V"
If C10 = 2 Then Lcd_data = "W"
If C10 = 3 Then
C10 = 0 : Lcd_data = "X"
End If
----------------------------------------------------------------------------------
Case Is = 9
Incr C9
If C9 = 1 Then Lcd_data = "Y"
If C9 = 2 Then Lcd_data = "Z"
If C9 = 3 Then
C9 = 0 : Lcd_data = "."
End If
'START OF LOWERLINE BUTTON PROGRAM------------------------
Case Is = 15
If S(count) <> Lcd_data Then Lcd_data = " "
Locate Y , X
Lcd Lcd_data
----------------------------------------------------------------------------------
Incr Count
S(count) = "$"
If Y = 4 Then Goto H2
Lcd_data = " "
If Y = 1 Then X1_save = X
If Y = 2 Then X2_save = X
If Y = 3 Then X3_save = X
Incr Y : X = 1
H2:
'END OF LOWERLINE BUTTON PROGRAM----------------------------
'START OF DELETE BUTTON PROGRAM------------------------------
Case Is = 14
S(count) = " "
If Count > 0 Then Decr Count
Decr X
----------------------------------------------------------------------------------
If Y = 1 Then
If X = 0 Then X = 1
End If
----------------------------------------------------------------------------------
If Y > 1 Then
If X = 0 Then
If Y = 4 Then X = X3_save
If Y = 3 Then X = X2_save
If Y = 2 Then X = X1_save
Decr Y
End If : End If
----------------------------------------------------------------------------------
Lcd_data = " "
Locate Y , X
Lcd Lcd_data
'END OF DELETE BUTTON PROGRAM---------------------------------
'START OF OK BUTTON PROGRAM-------------------------------------
Case Is = 13
Incr Count
S(count) = Lcd_data
Lcd_data = " "
----------------------------------------------------------------------------------
Incr X
If X > 15 Then
If Y = 1 Then X1_save = 15
If Y = 2 Then X2_save = 15
If Y = 3 Then X3_save = 15
If Y < 4 Then
X = 1 : Incr Y
Else
X = 15
End If : End If
'END OF OK BUTTON PROGRAM----------------------------------------
'START OF SEND BUTTON PROGRAM---------------------------------
Case Is = 12
Sending:
----------------------------------------------------------------------------------
Synchronous_data = 12
Send_data = Synchronous_data
Call Wireless_send
----------------------------------------------------------------------------------
For Send = 1 To Count Step 1
Code = S(send)
Call Message_code
String_of_send_data = Str(send_data)
H = Len(string_of_send_data)
If H = 1 Then
Send_data = Val(string_of_send_data)
Call Wireless_send
Send_data = 0
Call Wireless_send
End If
If H = 2 Then
S1 = Mid(string_of_send_data , 2 , 1)
Send_data = Val(s1)
Call Wireless_send
S2 = Mid(string_of_send_data , 1 , 1)
Send_data = Val(s2)
Call Wireless_send
End If
Next Send
----------------------------------------------------------------------------------
Synchronous_data = 12
Send_data = Synchronous_data
Call Wireless_send
'END OF SEND BUTTON PROGRAM------------------------------------
End Select
----------------------------------------------------------------------------------
Locate Y , X
Lcd Lcd_data
Sound Portd.3 , 100 , 80
----------------------------------------------------------------------------------
H3:
Recive_data = Getkbd()
If Recive_data <> 16 Then Goto H3
----------------------------------------------------------------------------------
Goto H1
'END OF WRITEING MESSAGE PROGRAM----------------------------
'START OF WIRELESS_SEND SUB--------------------------------------
Sub Wireless_send:
Reset Pt_power : Set Pt_enable
Incr Send_data
Select Case Send_data:
Case Is = 1
Set Portd.0 : Reset Portd.1 : Reset Portd.2 : Reset Portd.4
----------------------------------------------------------------------------------
Case Is = 2
Reset Portd.0 : Set Portd.1 : Reset Portd.2 : Reset Portd.4
----------------------------------------------------------------------------------
Case Is = 3
Set Portd.0 : Set Portd.1 : Reset Portd.2 : Reset Portd.4
----------------------------------------------------------------------------------
Case Is = 4
Reset Portd.0 : Reset Portd.1 : Set Portd.2 : Reset Portd.4
----------------------------------------------------------------------------------
Case Is = 5
Set Portd.0 : Reset Portd.1 : Set Portd.2 : Reset Portd.4
----------------------------------------------------------------------------------
Case Is = 6
Reset Portd.0 : Set Portd.1 : Set Portd.2 : Reset Portd.4
----------------------------------------------------------------------------------
Case Is = 7
Set Portd.0 : Set Portd.1 : Set Portd.2 : Reset Portd.4
----------------------------------------------------------------------------------
Case Is = 8
Reset Portd.0 : Reset Portd.1 : Reset Portd.2 : Set Portd.4
----------------------------------------------------------------------------------
Case Is = 9
Set Portd.0 : Reset Portd.1 : Reset Portd.2 : Set Portd.4
----------------------------------------------------------------------------------
Case Is = 10
Reset Portd.0 : Set Portd.1 : Reset Portd.2 : Set Portd.4
----------------------------------------------------------------------------------
Case Is = 11
Set Portd.0 : Set Portd.1 : Reset Portd.2 : Set Portd.4
----------------------------------------------------------------------------------
Case Is = 12
Reset Portd.0 : Reset Portd.1 : Set Portd.2 : Set Portd.4
----------------------------------------------------------------------------------
Case Is = 13
Set Portd.0 : Reset Portd.1 : Set Portd.2 : Set Portd.4
----------------------------------------------------------------------------------
End Select
Waitms 50
Set Pt_power
Reset Pt_enable
Waitms 400
Reset Pt_power
Set Pt_enable
Waitms 100
Return
End Sub Wireless_send
'END OF WIRELESS_SEND SUB----------------------------------------
'START OF MESSAGE_CODE SUB--------------------------------------
Sub Message_code:
Select Case Code:
Case Is = "0" : Send_data = 0
Case Is = "1" : Send_data = 1
Case Is = "2" : Send_data = 2
Case Is = "3" : Send_data = 3
Case Is = "4" : Send_data = 4
Case Is = "5" : Send_data = 5
Case Is = "6" : Send_data = 6
Case Is = "7" : Send_data = 7
Case Is = "8" : Send_data = 8
Case Is = "9" : Send_data = 9
Case Is = "A" : Send_data = 10
Case Is = "B" : Send_data = 11
Case Is = "C" : Send_data = 12
Case Is = "D" : Send_data = 13
Case Is = "E" : Send_data = 14
Case Is = "F" : Send_data = 15
Case Is = "G" : Send_data = 16
Case Is = "H" : Send_data = 17
Case Is = "I" : Send_data = 18
Case Is = "J" : Send_data = 19
Case Is = "K" : Send_data = 20
Case Is = "L" : Send_data = 21
Case Is = "M" : Send_data = 22
Case Is = "N" : Send_data = 23
Case Is = "O" : Send_data = 24
Case Is = "P" : Send_data = 25
Case Is = "Q" : Send_data = 26
Case Is = "R" : Send_data = 27
Case Is = "S" : Send_data = 28
Case Is = "T" : Send_data = 29
Case Is = "U" : Send_data = 30
Case Is = "V" : Send_data = 31
Case Is = "W" : Send_data = 32
Case Is = "X" : Send_data = 33
Case Is = "Y" : Send_data = 34
Case Is = "Z" : Send_data = 35
Case Is = "$" : Send_data = 36
Case Is = "." : Send_data = 37
Case Is = " " : Send_data = 38
End Select
Return
End Sub Message_code
'END OF MESSAGE_CODE SUB-----------------------------------------
بلوک مدار فرستنده یا SENDER
طرز کار مدار
این مدار با میکرو کنترلر AVR ATMEGA 8 و LCD کاراکتری 16*4
و یک ماژول فرستنده و گیرنده RF به شماره TLP434 که در باند فرکانسی zHM 315 کار میکند ساخته شده
است بلوک دیاگرام ماژول به شکل زیر است :
این ماژول ها هم به صورت تک و هم با ICدکودر در بازار موجود است :
طریقه ارسال SMS
بعد از کد گزاری هر دو ICدکودر مدار که باید هر دو کد یکسان باشند شروع به تایپ SMS میکنیم
برای اصلاح نوشته از کلید DELETEو سپس OKوبرای ارسال از کلید SENDاستفاده میکنیم .
برد مدار به عوامل گوناگون بستگی دارد اما با استفاده از همین ماژول و در فضای باز برد 3 الی 4
کیلومتر را می توان انتظار داشت.