اطلاعیه

Collapse
No announcement yet.

دریافت دیتای عجیب غریب از پورت سریال

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    دریافت دیتای عجیب غریب از پورت سریال

    سلام
    من یه پروزه وایرلس با hm-t و hm-r دارم انجام میدم که با مشکل روبرو شدم و دیتا های عجیب غریب تو گیرنده در یافت کردم .... تو تاپیکای انجمن کلی گشتم و .... :read:
    مقاله اقای سروری رو هم خوندم ولی جواب نگرفتم ، حتی کد های خود مقاله رو دقیقا استفاده کردم ولی باز هم نشد !
    بعد به توصیه دوستان ماژولا رو کنار گذاشتم و با سیم txd میکروی اول رو به rxd میکروی دو م وصل کردم
    ولی از شانس من باز هم کار نکرد و تا سیم ارتباطی سریال بین دو میکرو رو وصل می کنم ، گیرنده شروع می کنه به دریافت دیتاهای عجیب غریب (علامت و ...) حتی قبل از اینکه فرستنده رو روشن کنم !
    تو یه تاپیکی خوندم که باید داده های سریالمو بافر کنم ولی باز هم نشد ، یه جا دیگه گفته بود که باید از Enable Interrupts استفاده کنم ولی باز هم نشد ....
    اصلا انگار نویز رو پورت سریالمه !؟ میکرو رو عوض کردم ولی فرقی نکرد. :sad:

    قبلا از میکرو به کامپیوتر دیتا ارسال کردک (با دستور print) و با دستور inkey هم دیتا دریافت کردم ولی میکرو به میکرو تا حالا کار نکردم....

    حتی تو یکی از تاپیک ها بیان نموده بودند که از دستور زیر باید استفاده کرد :
    کد:
    Config Serialin = Buffered , Size = 50
    ولی باز هم فایده نداشت.
    برنامه فرستنده من :
    کد:
    ' wireless temp sender
    '   SEND
    $regfile = "m16def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Dim S As String * 1
    Config Portb = Input
    Dim E As Bit
    E = 1
    
    S = "h"
    Main:
    
    Do
    If Portb.0 = 1 And E = 1 Then
    Print S
    E = 0
    Goto Fff
    
    End If
    
    Loop
    
    Fff:
    Wait 2
    E = 1
    Goto Main
    
    End
    نکته : از inkey استفاده کردم نشد . از input استفاده کردم نشد .... از دستور print هم بصورت عادی و هم بصورت زیر استفاده کردم ولی باز هم نشد ؟!
    کد:
    print S;chr(13);
    تو یکی از تاپیک ها بیان شده بود که حتما باید در آخر دستور print علامت ; باشد. ولی باز هم کار ساز نبود.
    توجه : برنامه رو با wait های مختلف 20 میلی ثانیه تا 100 میکی ثانیه و حنتی 1-2 ثانیه نوشتم ولی باز هم نشد ....
    مدارو تا حالا 4-5 باز از اول بستم و باز کردم .... دیگه دارم دیوونه میشم .... :angry: :cry2:
    برنامه گیرنده من :
    کد:
    ' wireless temp sender
    '    RECEIVE
    $regfile = "m32def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
    
    Config Lcd = 16 * 2
    
    Cursor Off
    Config Serialin = Buffered , Size = 1
    Enable Interrupts
    
    Dim S As String * 1
    S = ""
    
    Main:
    Cls
    Home
    Lcd "no data"
    Home L
    Lcd "joone amat bia"
    Wait 1
    Cls
    Do
    
    Locate 1 , 1
    Lcd "temp:"
    
    S = Inkey()
    
    
    Locate 2 , 1
    Lcd S
    
    
    If S = "h" Then
    Cls
    Home
    Lcd "h umad yuhu"
    Exit Do
    End If
    
    Loop
    Locate 2 , 5
    Lcd "s end=" ; S
    End

    لطفا کمک بنمایید. پیشاپیش ممنون.
    ضمنا مقاله avr_1nafar رو هم دیدم ولی چیز خاصی ندیدم.....
    :cry2:
    http://www.eca.ir/forum2/index.php/topic,10159.0.html

    #2
    پاسخ : دریافت دیتای عجیب غریب از پورت سریال

    با بسکام کار میکنم.
    ضمنا یه برنامه نوشتم که فرستنده مرتب دیتا رو بفرسته ولی باز هم فایده نداشت ....
    کلا احساس می کنم رو پورت سریالم دیتاهای عجیب غریب هست ....
    سیم ارتباطی بین دو میکرو (ارتباط سریال) که وصل میشه ، با اینکه فرستنده خاموشه ... گیرنده همینطور دیتاهای عجیب غریب می گیره !
    موندم مشکل از برنامست یا از مدار ؟!
    شرطی هست که تو گیرنده بذارم که این دیتاهای عجیب غریب رو در نظر نگیره ؟!
    حتی شرط زیر رو هم بکار بردم ولی جواب نداد :

    کد:
    dim s as string *1
    s= ""
    s=inkey()
    if s<>"" then
    lcd s
    end if
    دیگه نمی دونم باید چه کنم ..... :sad: :cry:
    http://www.eca.ir/forum2/index.php/topic,10159.0.html

    دیدگاه


      #3
      پاسخ : دریافت دیتای عجیب غریب از پورت سریال

      به یه نتایجی رسیدم :
      تو برنامه فرستنده اینو زدم :
      کد:
      ' wireless temp sender
      '   SEND
      $regfile = "m16def.dat"
      $crystal = 8000000
      $baud = 9600
      Dim S As String * 1
      S = "h"
      Do
      Print S
      Waitms 400
      
      Loop

      تو گیرنده هم نوع متغیر دریافت کنندمو بایت کردم و از اونجایی که گفته شده دستور inkey کد اسکی می گیره ، یه شرط اضافه کردم که فقط اگر دیتایی که می گیریم (کد اسکی) تو رنج کد اسکی حروف a تا z باشه ، سیستم کار کنه....

      کد:
      ' wireless temp sender
      '    RECEIVE
      $regfile = "m16def.dat"
      $crystal = 8000000
      $baud = 9600
      
      Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
      Config Lcd = 16 * 2
      Cursor Off
      Enable Interrupts
      Dim S As String * 1
      Dim P As Byte
      S = ""
      P = 63
      
      Main:
      Cls
      Home
      Lcd "no data"
      Home L
      Lcd "joone amat bia"
      Wait 1
      Cls
      Do
      Locate 1 , 1
      Lcd "temp:"
      
      P = Inkey()
      If P > 96 And P < 123 Then
      S = Chr(p)
      
      Locate 2 , 1
      Cls
      Home L
      Lcd "s=" ; S ; " p=" ; P
      If S = "h" Then
      
      Home
      Lcd "h umad yuhu"
      Exit Do
      End If
      End If
      
      Loop
      
      End

      ولی یه مشکلی دارم ، :cry: هنوز رو پورت نویز هست (دیتای غیرقابل استفاده) و حتی حروف o و p و n هم دریافت می کنم.... !؟
      :angry: oo: :sad:
      http://www.eca.ir/forum2/index.php/topic,10159.0.html

      دیدگاه


        #4
        پاسخ : دریافت دیتای عجیب غریب از پورت سریال

        من هم همین مشکل رو داشتم!!!
        http://www.eca.ir/forum2/index.php?topic=46695.0
        این تاپیک رو بخون!!!
        باید از بافر استفاده کنی و اینتراپت رو فعال کنی !!!
        به همین سادگی :nerd:

        دیدگاه


          #5
          پاسخ : دریافت دیتای عجیب غریب از پورت سریال

          ممنون ولی تاپیک مذکور رو قبلا خوندم و تست هم کردم ولی جواب نداد . الان مجدد تستش کردم ولی باز هم نشد.

          تو گیرنده حروفی مثل o p n دریافت می کنم ! oo: :angry:
          اصلا معلوم نیست اینا از کجا میان ؟! البته بعد از چند تا از اینا ، h هم میاد (خوشبختانه) .....
          این هم برنامه گیرنده به روشی که شما گفتین :
          کد:
          ' wireless temp sender
          '    RECEIVE
          $regfile = "m16def.dat"
          $crystal = 8000000
          $baud = 9600
          
          Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
          
          Config Lcd = 16 * 2
          
          Cursor Off
          Config Serialin = Buffered , Size = 1
          Enable Interrupts
          
          Dim S As String * 1
          Dim P As Byte
          S = ""
          P = 63
          
          Main:
          Cls
          Home
          Lcd "no data"
          Home L
          Lcd "joone amat bia"
          Wait 1
          Cls
          Do
          
          Locate 1 , 1
          Lcd "temp:"
          
          P = Inkey()
          If P > 96 And P < 123 Then
          S = Chr(p)
          
          Locate 2 , 1
          Cls
          Home L
          Lcd "s=" ; S ; " p=" ; P
          If S = "h" Then
          
          Home
          Lcd "h umad yuhu"
          Exit Do
          End If
          End If
          
          
          
          Loop
          
          End
          ببینین چیزی کم و کسر داره !؟
          http://www.eca.ir/forum2/index.php/topic,10159.0.html

          دیدگاه


            #6
            پاسخ : دریافت دیتای عجیب غریب از پورت سریال

            من همه ی این مشکلات تو رو داشتم
            اول باید چند تا چیز مشخص بشه!!!
            باود ریتت درسته؟ یعنی مطمئنی که باید 9600 استفاده کنی؟
            کریستالت چیه؟ اگه از اسیلاتور داخلی میکرو استفاده میکنی احتمال 80% مدارت نباید کار کنه!!! چون خودم این مشکل رو داشتم!!
            حتمی از دستور بافر استفاده کن!!!

            دیدگاه


              #7
              پاسخ : دریافت دیتای عجیب غریب از پورت سریال

              نوشته اصلی توسط parsa921
              من همه ی این مشکلات تو رو داشتم
              اول باید چند تا چیز مشخص بشه!!!
              باود ریتت درسته؟ یعنی مطمئنی که باید 9600 استفاده کنی؟
              کریستالت چیه؟ اگه از اسیلاتور داخلی میکرو استفاده میکنی احتمال 80% مدارت نباید کار کنه!!! چون خودم این مشکل رو داشتم!!
              ممنون از راهنماییات .

              باود ر یتم رو 9600 گذاشتم ....نو هر 2 طرف یعنی میگی زیاده ؟!
              کریستال داخلی خود میکرو رو استفاده می کنم ، یعنی مشکل سازه ؟! باید حتما کریستال خارجی بذارم ؟!
              کریستال خارجی چند هرتز بذارم ؟
              حتمی از دستور بافر استفاده کن!!!
              منظورت مگه اینا نیست ؟!
              کد:
              Config Serialin = Buffered , Size = 1
              Enable Interrupts

              دستوراتمو تو ارسال قبلیم گذاشتم بی زحمت یه نگاهی بنداز ، ببین کجاهاش ایراد داره.
              ممنون از راهنماییات.
              http://www.eca.ir/forum2/index.php/topic,10159.0.html

              دیدگاه


                #8
                پاسخ : دریافت دیتای عجیب غریب از پورت سریال

                این یه نمونه از برنامه دریافت sms از gsm modem هست
                این برنامه با موفقیت کار کرد :nerd:
                کد:
                $regfile = "m32def.dat"
                $crystal = 12000000
                $baud = 9600
                  Config Serialin = Buffered , Size = 250
                
                  Enable Interrupts
                
                  Config Pina.0 = Output
                  Config Pina.1 = Output
                  Config Pina.2 = Output
                  Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
                  Config Lcd = 16 * 2
                  Dim D As String * 200
                  Dim G As Byte
                  Dim Sms As String * 20
                  Declare Sub Control
                  Dim Q As String * 22
                  Dim B As Byte
                  Dim N As Byte
                  Waitms 1000
                  Print "at+cmgf=1"
                  Waitms 200
                  Print "at+cnmi=1,2,0,0,1"
                  Waitms 300
                    Do
                      Cls
                      Clear Serialin
                      Waitms 20
                      G = Waitkey()
                      Call Control
                      Wait 10
                    Loop
                  End
                
                
                
                
                
                  Sub Control:
                    Cls
                    D = ""
                    N = 0
                
                    Do
                      B = Inkey()
                       Incr N
                      If N = 199 Then Exit Do
                     D = D + Chr(b)
                      Waitms 5
                      Loop
                      Waitms 20
                
                      Print "at+cmgd=1"
                      Waitms 50
                       D = Ltrim(d)
                       Q = Right(d , 22)
                       Sms = Left(q , 20)
                      If Sms = "est202340:rowshan:01" Then Set Porta.0
                      If Sms = "est202340:khamush:01" Then Reset Porta.0
                      If Sms = "est202340:rowshan:02" Then Set Porta.1
                      If Sms = "est202340:khamush:02" Then Reset Porta.1
                      If Sms = "est202340:rowshan:03" Then Set Porta.2
                      If Sms = "est202340:khamush:03" Then Reset Porta.2
                
                
                      Cls
                      Lcd Sms
                    End Sub

                دیدگاه


                  #9
                  پاسخ : دریافت دیتای عجیب غریب از پورت سریال

                  آره احتمال 80% مشکل همونه!!! چون منم دقیقا همین مشکل رو داشتم و کاراکتر های عجیب غریب دریافت میکردم
                  از کریستال 11.059 استفاده کن!! این کریستال مخصوص سیستم های سریال هست!!! خطا با این کریستال دقیقا صفر هستش!!!
                  برنامه من رو بخون!!! و ببین چیکار کردم
                  بازم میگم حتمی از بافر استفاده کن که اطلاعاتت به فنا نره
                  از دستور input نمیتونی استفاده کنی به علت اینکه آخر دیتای دریافتی تو باید کاراکتر اینتر بشه و شاید تو این کاراکتر رو نداشته باشی!!!
                  پس از دستورات watekey و inkey استفاده کن!!!
                  تو قدم اول بیا از کریستال خارجی استفاده کن مطمئنم که مشکلت حل میشه :nerd:

                  دیدگاه


                    #10
                    پاسخ : دریافت دیتای عجیب غریب از پورت سریال

                    فقط یدونه کریستال 12 مگ دارم. :sad:
                    پروژه واسه یه ینده خداست ، باید فردا صبح براش پست کنم ! :cry: :cry2:
                    ضمنا Clear Serialin هم کارساز نبود
                    یه چیز جالب ، فرستنده خاموشه ولی گیرنده کاراکتر o n و حتی h رو میگیره !؟
                    سیم ارتباطی که قطعه ، گیرنده هیچی نمیگیره (فرستنده خاموشه) . سیم ارتباطی که به فرستنده ی خاموش وصل میشه ، گیرنده حروف مذکور رو میگیره و بعد از مدتی حتی h رو هم می گیره !
                    کلا گیرنده خیلی حساسه ، حتی rxd گیرنده که به دستم می خوره ، گیرنده کاراکتری مثل v رو میگیره...

                    ای کاش کدامو یه نگاهی مینداختی... که مطمئن بشم کد ها درسته و برم سراغ کریستال.
                    http://www.eca.ir/forum2/index.php/topic,10159.0.html

                    دیدگاه


                      #11
                      پاسخ : دریافت دیتای عجیب غریب از پورت سریال

                      همون 12 مگ رو بزن
                      الان پروژه خودم با 12 مگ داره کار میکنه!!!!
                      اما واسه اطمینان بد نبود از 11.059 استفاده کنی!!!
                      دستور clear serialin بافر ورودی رو پاک میکنه!!!! این دستور رو باید بعد از این که دیتا رو خوندی بنویسی که بافر آماده دریافت اطلاعات جدید بشه!!!
                      سایز بافر رو هم چند تا بیشتر از تعداد کاراکتر هایی بزار که میخوای دریافت کنی

                      دیدگاه


                        #12
                        پاسخ : دریافت دیتای عجیب غریب از پورت سریال

                        آخه از شانسم ، یدونه کریستال 12 بیشتر ندارم ،
                        یکی با 12 کار کنه اون یکی میکرو با 8 نمیشه.... سرعتا مچ نیست .....
                        آخ .... :angry: خارنها رو خونه جا گذاشتم .... :cry2: :angry: :sad:
                        http://www.eca.ir/forum2/index.php/topic,10159.0.html

                        دیدگاه


                          #13
                          پاسخ : دریافت دیتای عجیب غریب از پورت سریال

                          از یه آدم وارد پرسیدم ، گفت به کریستال ربطی نداره ، بذار رو 4000000 و باود رو هم بذار رو 9600 ....
                          بعد هم که براش توضیحات برنامه رو دادم .... گفت برنامه گیرندم اشتباهه !؟

                          لطفا یکی این برنامه گیرنده منو یه نگاه بندازه ببینه مشکلش کجاست ...؟!
                          http://www.eca.ir/forum2/index.php/topic,10159.0.html

                          دیدگاه


                            #14
                            پاسخ : دریافت دیتای عجیب غریب از پورت سریال


                            من چند تا برنامه توی همین سایت با وقفه سریال گزاشتم و خوب هم جواب میده
                            یه سرچ بکن پیداش میکنی
                            به اسم ارتباط سریال با وقفه سرچ کن


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

                            دیدگاه


                              #15
                              پاسخ : دریافت دیتای عجیب غریب از پورت سریال

                              سلام
                              من با این برنامه ها تو عمل یکم جوای گرفتم :
                              یعنی دیتا میاد ولی بین ارسالهای فرستنده ، یه سری کاراکترای الکی دریافت میشه ؟!
                              مثلا من had رو می فرستم ولی اونور hadCen./\sn همچسن چیزی دریافت میشه ... البته گاهی که وسط کار گیرنده رو خاموش روشن می کنم ... شانسی شانسی دیتا رو درست می گیره و عبارت یوهو رو نشون میده .... البته این هم همیشه نیست ..!

                              به نظرم مشکلم اینه که وقتی فرستنده هیچی ارسال نمی کنه ، همینطوری دیتا (حروف و عدد !) رو خط میاد ... نمی دونم نویزه یا ... ؟!؟!؟!
                              در صورتی که باید در این زمانها فقط و فقط 0 دریافت بشه :cry:

                              برنامه فرستنده :
                              ' wireless temp sender
                              ' SEND
                              $regfile = "m16def.dat"
                              $crystal = 4000000
                              $baud = 9600

                              Config Serialin = Buffered , Size = 5
                              Enable Interrupts

                              Dim S As String * 3
                              Dim I As Byte

                              S = "had"
                              Main:
                              Clear Serialout
                              Do

                              Print Chr(13) ; S ; Chr(13);
                              Waitms 60

                              Loop

                              برنامه گیرنده :
                              ' wireless temp sender
                              ' RECEIVE
                              $regfile = "m16def.dat"
                              $crystal = 4000000
                              $baud = 9600
                              Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
                              Config Lcd = 16 * 2
                              Cursor Off

                              Config Serialin = Buffered , Size = 5
                              Enable Interrupts
                              Dim G As Byte , P As Byte , S As String * 5

                              S = ""

                              Cls
                              Main:
                              Clear Serialin
                              Do
                              Locate 1 , 1
                              Lcd "temp:"

                              G = Inkey()
                              If G = 13 Then
                              Gosub Begir
                              End If

                              Clear Serialin

                              Locate 2 , 1
                              Lcd S
                              If S = "had" Then
                              Cls
                              Lcd "yuhulal d=" ; S
                              Exit Do
                              End If

                              Loop
                              End

                              Begir:
                              Do
                              P = Inkey()
                              If P <> 13 Then
                              S = S + Chr(p)
                              Elseif P = 13 Then
                              Return
                              End If
                              Loop



                              ولی بااین وقفه اصلا تو پروتئوس جوای نمیده ؟!

                              فرستنده :
                              ' SEND 2
                              $regfile = "m16def.dat"
                              $crystal = 4000000
                              $baud = 9600

                              Dim S As String * 4
                              Enable Interrupts
                              S = "hadi"
                              Main:

                              Do

                              Print Chr(13) ; S ; Chr(13);
                              Waitms 40

                              Loop


                              گیرنده :

                              ' RECEIVE 2
                              $regfile = "m16def.dat"
                              $crystal = 4000000
                              $baud = 9600
                              Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
                              Config Lcd = 16 * 2
                              Cursor Off
                              Enable Interrupts
                              Enable Urxc
                              On Urxc Begir
                              Dim A As Byte , S As String * 5 , E As Bit
                              E = 0
                              S = ""
                              Cls
                              Do
                              Locate 1 , 1
                              Lcd "a=" ; A
                              Locate 2 , 1
                              Lcd "s=" ; S
                              Loop

                              Begir:
                              A = Udr
                              If A = 13 And E = 0 Then E = 1
                              If A = 13 And E = 1 Then
                              E = 0
                              Goto Tamam
                              End If

                              If E = 1 Then
                              S = S + Chr(a)
                              End If

                              Return

                              Tamam:
                              Cls
                              Locate 1 , 1
                              Lcd S

                              End

                              کمک پلیز :angry: :sad: :cry: :cry2:
                              http://www.eca.ir/forum2/index.php/topic,10159.0.html

                              دیدگاه

                              لطفا صبر کنید...
                              X