کنترل لوازم منزل از طریق خط تلفن+تراشه ISDXX+MT8870+ATMEGA8

در این پروژه  قصد کنترل لوازم منزل با استفاده از خط تلفن را داریم.بدین گونه که پس از تماس با تلفن مربوطه ،بعد از دو زنگ خط بصورت اتومات آزاد شده و پیغام درخواست رمز را پخش می نماید. در صورتی که رمز وارد شده صحیح باشد ،سیستم پیغامی مبنی بر چگونگی کنترل لوازم را پخش می کند. ودر صورت اشتباه بودن مجددا رم را درخواست میکند و چنانچه رمز سه مرتبه اشتباه وارد شود،سیستم بطور اتومات خط تلفن را قطع میکند. این پروژه برای کنترل سه دستگاه در نظر گرفته شده  است.

رمز اولیه دستگاه بعد از پروگرام کردن 0000 است، وپس از تغییر آن در حافظه ای تو پی رام قرار می گیرد و یعنی اینکه با قطع شدن برق هم رمز دستگاه باقی خواهد ماند. عدد 7878 هم به عنوان رمز ثابت در نظر گرفته شده است،یعنی رمز ورودی دستگاه هر عددی که باشد با این رمز هم می توان وارد سیستم شد و حتی رمز قبلی را تغییر داد.

چنانچه پس از ورود به سیستم به مدت زمان 30 ثانیه هیچ کلیدی فشرده نشود،سیستم وارد TIME OUT شد و پس از پخش پیغامی خط تلفن را قطع می کند.

در این پروژه بخش پخش صدا و آشکار ساز DTMF و آشکار ساز زنگ بصورت مدارهای جدایی ساخته شده ند ،و بصورت ماژول بر روی برد اصلی قرار می گیرند.

تصویر  مدار به همراه ماژول های ساخته شده

20090706192.jpg

نیازی نیست که LCD در مدار گذاشته شود،بنده LCD را برای این گذاشتم که راحت تر بتوام رفع اشکال برنامه مدار را انجام دهم ،الان هم که اشکالات برنامه رفع شده نیازی به LCD نیست.


دریافت فایل برنامه مدار

دریافت فایل شماتیک مدار

دریافت فایل های PCB مدار

دانلود فایل راهنما (صوتی)

برنامه مدار


$regfile "m8def.dat"
$crystal = 1000000
'''''''''''''''''''''''''''''\\\\\\\\\\\\\\\\\\\\\\\''''''''''''''''''''''''''''
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portb.1 , Rs = Portc.5 , E = Portb.5
Config Lcd = 16 * 2
Cls
Cursor Off

'###############################################################################
'###############################################################################

'$$$$$$$$$$$$$$$$$$$$$$$  MAIN BOARD CONFIGURATION ''''''''''''''''''''''''
Config Portb.0 = Output                                     'relay line
Config Portd.0 = Output                                     'relay1
Config Portd.1 = Output                                     'relay2
Config Portd.2 = Output                                     'relay3

Conect Alias Portb.0
Rel1 Alias Portd.0
Rel2 Alias Portd.1
Rel3 Alias Portd.2



'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOUND BOARD CONFIGURATION #####################
'1.VCC    2.GND   3.EOM--    4.PD     5.CE--   6.M0    7.M6    8.SOUND
Config Portc.4 = Input                                      'EOM
Config Portc.3 = Output                                     'PD
Config Portc.2 = Output                                     'CE
Config Portc.1 = Output                                     'M6
Config Portc.0 = Output                                     'M0


Eom Alias Pinc.4
Pd Alias Portc.3
Ce Alias Portc.2
M0 Alias Portc.1
M6 Alias Portc.0

Const Insert_pin = 1
Const Pass_incorrect = 2
Const Welcome = 3
Const Hang_up = 4
Const Rel1_on = 5
Const Rel1_off = 6
Const Rel2_off = 8
Const Rel2_on = 7
Const Rel3_on = 9
Const Rel3_off = 10
Const Not_valid_key = 11
Const New_pass = 12
Const Try_again_pin = 13
Const Not_mached = 14
Const Pin_changed = 15





'$$$$$$$$$$$$$$$$$$$$$$$$$$$$ DTMF & RING DETECT CONFIGURATION $$$$$$$$$$$$$$$$$
'1.VCC  2.GND   3.STD  4.Q1   5.Q2   6.Q3   7.Q4   8.IN   9.RING DETECTED   10.GND
'11. RING    12.TIP
Config Portd.3 = Input                                      'STD  & int1
Config Portd.4 = Input                                      'Q1
Config Portb.6 = Input                                      'Q2
Config Portb.7 = Input                                      'Q3
Config Portd.5 = Input                                      'Q4
Config Portd.6 = Input                                      'RING DETECTED

Standard Alias Pind.3
Q1 Alias Pind.4
Q2 Alias Pinb.6
Q3 Alias Pinb.7
Q4 Alias Pind.5
Ring_det Alias Pind.6


'&&&&&&&&&&&&&&&&&&&&&&&& HARDWAR & SOFTWAR CONFIGURATION &&&&&&&&&&&&&&&&&&&&&&
Const Def_t1 = 40000
Const Def_t2 = 100
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Enable Interrupts

Config Timer1 = Timer , Prescale = 1024
Enable Ovf1
On Ovf1 T1_int
Enable Timer1


Config Timer2 = Timer , Prescale = 1024
Enable Ovf2
On Ovf2 T2_int
Enable Timer2


Config Int1 = Rising
Enable Int1
On Int1 Rec_tone

Dim Ring_no As Word
Dim Ring_def As Word                                        'NUMBER OF RINGING FOR CONECT
Ring_def = 10                                               'SET DEFULT FOR RINGING


Dim Wrong_pass As Byte
Dim T2_count As Word

Dim Disconect As Bit
Dim Data_flag As Bit
Dim Data_recv As Byte
Dim Pin As Word
Dim Check_pin As Word
Dim Num_of_pin As Byte
Dim Def_pin As Eram Word
Dim Check_pin2 As Word
Dim Acc As Byte
Dim S_track As Byte

Dim I As Byte

Timer1 = Def_t1
Timer2 = Def_t2


'++++++++++++++++++++++++++++++++++++++++ sub rutine +++++++++++++++++++++++++++
Declare Sub Spk(byval A As Byte)
Declare Sub Revival                                         'REVIVAL TIME OUT




'+++++++++++++++++++++++++++++   MAIN PROGRAM ++++++++++++++++++++++++++++++++++
'###############################################################################
Cls
Lcd "hello"
Wait 2
Cls
Do

Start_prog:

             ''''''''''''''''' wait for ring '''''''''''''''''''''
            If Ring_det = 1 Then
Cls
Locate 1 , 1
Lcd Ring_no
                Goto Start_prog

            End If
'                LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
'
            Call Revival
            Start Timer2
         'LLLLLLLLLLLLLLL    WAIT FOR DEFINED RING OCCURED #############
            If Ring_def > Ring_no Then
            Goto Start_prog
            End If
                       '''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''' ACCEPT RING ''''''''''''''''''''''''''''''''''''
            Stop Timer2
            Timer2 = Def_t2                                 'READY FOR ANOTHER USE
            Ring_no = 0                                     'READY FOR ANOTHER USE
            Set Conect                                      'FREE LINE
            Call Spk(insert_pin)                            'PLAY SOUNDPASSWORD REQUEST
Locate 1 , 5
Lcd "conect"
Jj:

          If Conect = 0 Then
          Goto Start_prog
          End If
          ' EEEEEEEEEEEEE    WAIT FOR ANY KEY PRESSED     EEEEEEEEEEEE

            If Data_flag = 0 Then                           'DATA FLAG WHEN ANY TONE RECIVED GOES SET  WITH INT1
Locate 1 , 13
Lcd Num_of_pin
                   Goto Jj
            End If


                              ''''''''''''''''''''''''''''''''''


            Reset Data_flag                                 'CLEAR DATA_FLAG FOR ANOTHER USE

            Call Revival                                    ' REVIVAL TIME OUT
            Incr Num_of_pin                                 'COUNTING NUMBER OF RECIVING TONE,WHEN THIS =4 ,PASSWORD CHECKING


Locate 2 , 1
Lcd Data_recv

                          ''''''''''''''''''''''''''''''''''''''''''
            Select Case Data_recv                           '* AND #  IS NOT CHARACTER  FOR PASSWORD,WHEN # OCCURED MEANS THAT THE LINE MUST BE DISCONECTED & WHEN * RECIVED THAT MEANS PASSWORD ENETRED AGIN

            Case 11                                         '* RECIVED
            Num_of_pin = 0
            Call Spk(insert_pin)
            Case 12
Locate 2 , 5
Lcd "thanks hang"
            Call Spk(hang_up)                               'PLAYING HANG UP AND THANKS FOR USE THIS SYSTEM
            Goto Start_prog                                 'GOING TO START OF PROGRAM AND WAIT FOR DISCONECT

            End Select
                             'HHHHHHHHHHHHHHHHHHHHHHHHH

            'EEEEEEEEEEEEE  CRAETIN CHAR INPUT TO NUMBER FOR COMPARE WITH PASSWORD   EEEEEEEEEEEEEEEEE
            Select Case Num_of_pin

            Case 0                                          'THAT MEANS * PRESSED
            Goto Jj                                         'GOING TO WAIT FOR RECIVING DIAL TONE

            Case 1
            Check_pin = Data_recv * 1000
            Pin = Check_pin

            Case 2
            Check_pin = Data_recv * 100
            Pin = Pin + Check_pin

            Case 3
            Check_pin = Data_recv * 10
            Pin = Pin + Check_pin

            Case Is => 4
            Check_pin = Data_recv
            Pin = Pin + Check_pin
        'HHHHHHHHHHHHH   COMPARE RECIVED NUMBER WITH SYSTM,S PASSWORD    HHHHHHHHHHHHHHHHH
            If Pin = Def_pin Then                           'DEF_PIN IS  SYSTEM,S PASSWORD
                     Goto Accept
                     Elseif Pin = 7878 Then
                     Goto Accept
            End If

            Incr Wrong_pass                                 'COUNTING THE NUM OF INCORRECT PASSWORD ENTERED
Locate 2 , 15
Lcd "wr"

            If Wrong_pass => 3 Then
                              Call Spk(pass_incorrect)
                              Wait 3
                              Call Spk(hang_up)
                              Goto Start_prog               'GOING TO START OF PROGRAM & WAIT FOR HANG UP
            End If

                     Call Spk(pass_incorrect)               'PLAYIN INCORRECT PASS ENTERED SOUND
                     Wait 2
                     Call Spk(insert_pin)
                     Num_of_pin = 0

            End Select
Locate 2 , 10
Lcd Pin
            Goto Jj                                         'GOING TO WAIT FOR RECIVING DIAL TONE

'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% accepted password %%%%%%%%%%%%%%%%%%%%%%%%%%%
Accept:
Cls
Lcd "accepted"
            Call Spk(welcome)                               'PASSWORD IS VALIDATED & PLAYING WELCOME SOUND
            Num_of_pin = 0                                  'READY FOR  USE
Dj:

            If Conect = 0 Then
          Goto Start_prog
          End If
            'WWWWWWWWWWW       WAIT FOR DIAL TONE  TO CONTROL ''''''''''''''''''
            If Data_flag = 0 Then
                   Goto Dj
            End If
                      '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

            Reset Data_flag
            Call Revival()


             Select Case Data_recv

             Case 1
             Set Rel1
             Call Spk(rel1_on)
Locate 2 , 1
Lcd "system1=on "


             Case 2
             Set Rel2
            Call Spk(rel2_on)
Locate 2 , 1
Lcd "system2=on "


             Case 3
             Set Rel3
             Call Spk(rel3_on)
Locate 2 , 1
Lcd "system3=on "



             Case 4
             Reset Rel1
             Call Spk(rel1_off)
 Locate 2 , 1
 Lcd "system1=off"

             Case 5
             Reset Rel2
             Call Spk(rel2_off)
 Locate 2 , 1
 Lcd "system2=off"



             Case 6
             Reset Rel3
             Call Spk(rel3_off)
 Locate 2 , 1
 Lcd "system3=off"
             Case 11
             Call Spk(new_pass)
             Goto Change_pin

             Case 12
Call Spk(hang_up)
Locate 2 , 5
Lcd "thanks hang"
Wait 2
             Goto Start_prog

             Case Else
             Call Spk(not_valid_key)
 Locate 2 , 1
 Lcd "not valid dial tone"
             End Select

             Goto Dj
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'\\\\\\\\\\\\\\\\\\\\\\\\\ change password \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Change_pin:
 Locate 1 , 1
 Lcd "change password"

             If Conect = 0 Then
          Goto Start_prog
          End If

            If Data_flag = 0 Then
                   Goto Change_pin
            End If

            Reset Data_flag

           Call Revival()
           Incr Num_of_pin


            Select Case Data_recv
            Case 11
            Num_of_pin = 0
            Case 12
            Call Spk(hang_up)
            Goto Start_prog
            End Select


            Select Case Num_of_pin

            Case 0
            Call Spk(new_pass)
            Goto Change_pin

            Case 1
            Check_pin = Data_recv * 1000
            Pin = Check_pin

            Case 2
            Check_pin = Data_recv * 100
            Pin = Pin + Check_pin

            Case 3
            Check_pin = Data_recv * 10
            Pin = Pin + Check_pin

            Case Is => 4
            Check_pin = Data_recv
            Pin = Pin + Check_pin
            Check_pin2 = Pin

Locate 2 , 1
Lcd "                       "
Locate 2 , 1
Lcd Pin
Goto Again
             End Select

             Goto Change_pin
Again:


             Call Spk(try_again_pin)
             Num_of_pin = 0
'                        ----------------- re enter pass -------------------
Try_again:


             If Conect = 0 Then
          Goto Start_prog
          End If

            If Data_flag = 0 Then
                   Goto Try_again
            End If

            Reset Data_flag

            Call Revival()
             Incr Num_of_pin


            Select Case Data_recv
            Case 11
            Num_of_pin = 0
            Call Spk(try_again_pin)

            Case 12
            Call Spk(hang_up)
            Goto Start_prog
            End Select


            Select Case Num_of_pin

            Case 0
            Goto Try_again

            Case 1
            Check_pin = Data_recv * 1000
            Pin = Check_pin

            Case 2
            Check_pin = Data_recv * 100
            Pin = Pin + Check_pin

            Case 3
            Check_pin = Data_recv * 10
            Pin = Pin + Check_pin

            Case Is => 4
            Check_pin = Data_recv
            Pin = Pin + Check_pin
            Num_of_pin = 0
Locate 2 , 7
Lcd Pin
            Goto Dd
             End Select

Goto Try_again

Dd:
           If Check_pin2 = Pin Then
           Def_pin = Pin
           Call Spk(pin_changed)
Locate 2 , 1
Lcd "pin changed "
Wait 2
           Goto Accept
           Else
           Call Spk(not_mached)
Locate 2 , 1
Lcd "pin not changed "
Wait 2
           Goto Change_pin
           End If

Loop
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

End                                                         'end program


'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH HANG UP TIMER HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
T1_int:
            Stop Timer1
            Timer1 = Def_t1                                 'READY FOR ANOTHER USE
            Stop Timer2
            Timer2 = Def_t2                                 'READY FOR ANOTHER USE
            Reset Conect                                    'HNAG UP LINE PHONE
            Ring_no = 0                                     'SET TO DEFUALT
            Num_of_pin = 0                                  'SET TO DEFUALT
            Wrong_pass = 0
            Return

'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

'KKKKKKKKKK  TIME BETWIN RING AND SILENCE & NUMBER OF RING KKKKKKKKKKKKKKKKKKKKK
T2_int:
            Stop Timer2
            Timer2 = Def_t2
            Incr Ring_no
            Return
'JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ


'HHHHHHHHHHHHHHHHHHH RECIVING DIAL TONE HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Rec_tone:

            Set Data_flag


            Data_recv = Q1 * 8
            Acc = Q2 * 4
            Data_recv = Acc + Data_recv
            Acc = Q3 * 2
            Data_recv = Acc + Data_recv
            Data_recv = Data_recv + Q4
            If Data_recv = 10 Then
            Data_recv = 0
            End If
            Return

'HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH


'''''''''''''''''''''''''' revival time out ''''''''''''''''''''''''''''''''''''
Sub Revival
            Stop Timer1
            Timer1 = Def_t1
            Start Timer1

End Sub

'============================ track playin subrutine ===========================

Sub Spk


            Reset Pd
            Set Ce


            Set M0
            Set M6

            Reset Ce
            Waitms 50
            Set Ce
            Waitms 50


            Set Pd
            Waitms 50
            Reset Pd
            Waitms 50

            For I = 1 To A

            Reset Ce
            Waitms 50
            Set Ce
            Waitms 50

            Next

            Reset M0


            Reset Ce
            Waitms 50
            Set Ce

End Sub

'llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll


مطالب مشابه :


پروژه کنترل وسایل منزل از طریق خط تلفن + PCB + کدویژن

همانطور که از نام مدار پیداست وظیفه این پروژه کنترل وسایل خانگی با استفاده از خط تلفن است .




کنترل لوازم منزل از طریق خط تلفن+تراشه ISDXX+MT8870+ATMEGA8

در این پروژه قصد کنترل لوازم منزل با استفاده از خط تلفن را پس از پخش پیغامی خط تلفن را




پروژه کنترل وسایل منزل از طریق خط تلفن + PCB + کدویژن

همانطور که از نام مدار پیداست وظیفه این پروژه کنترل وسایل خانگی با استفاده از خط تلفن است .




دانلود پروژه کنترل وسایل منزل از طریق خط تلفن + PCB + کدویژن

دانلود پروژه کنترل وسایل منزل از كه هر روز هنگام شماره گيري با تلفن ميشنويم و براي




پروژه کنترل وسایل برقی با استفاده از موبایل

برچسب‌ها: پروژه کنترل وسایل برقی با موبایل, پروژه کنترل وسایل برقی با تلفن,




پریزبرق کنترل از راه دور بوسیله تلفن

دیگر نگران کنترل وسایل برقی خانه در حل نموده و با استفاده از تلفن کنترل همه وسایل




دانلود پروژه کنترل وسایل منزل از طریق خط تلفن + PCB + کدویژن

» دانلود مرورگر گوگل کروم با افزونه Secure Http » آموزش برنامه سازی پیشرفته در C++




برچسب :