اطلاعیه

Collapse
No announcement yet.

کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا

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

    کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا

    من می خوام از کامپیوتر با ویژوال بیسیک یه سری بایت(مثلا 1000بایت) رو به میکرو بفرستم اما بایستی بدون خطا باشه باید از چه روشی استفاده کنم؟
    کد CRC میشه؟
    می بینیم و نادیده می گیریم!

    #2
    پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا

    یک اشتباهی که عموما انجام میشه اینه که فکر میکنیم استفاده از CRC یا checksum به تنهایی تبادل امن اطلاعات رو تضمین میکنه. در صورتیکه اینها فقط کمک میکنن تا شانس فهمیدن این نکته که داده دریافت شده دارای خطا هست افزایش پیدا کنه.

    شما میتونی اطلاعات رو در فریم های کوچیک بفرستی (مثلا 10 بایتی) و در میکرو CRC اون رو چک کنی. اگر CRC با اونی که همراه فریم اومده یکی نبود به کامپیوتر اطلاع بدی که دوباره بفرسته. در غیر اینصورت فریم بعدی تا الی آخر.

    دیدگاه


      #3
      پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا

      یه سوال.
      آیا در VB دستوری برای محاسبه کد crc هست؟
      می بینیم و نادیده می گیریم!

      دیدگاه


        #4
        پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا

        فکر نمیکنم.
        ولی یک متد راحتتر و نسبتا مطمئن استفاده از checksum و bcc هست. شما میتونی اطلاعاتت رو با هم XOR کنی و به عنوان یک بایت در انتهای هر فریم بفرستی. محاسبه این کد میتونه در هنگام دریافت اطلاعات در وقفه سریال داخل میکرو به سرعت انجام بشه.

        دیدگاه


          #5
          پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا

          خیلی ممنون از راهنمایی هات.
          راستش بهترین روش به نظر خودم اینه:(چون من سرعت بالا نیاز ندارم و دقت 100% خواهد بود)
          1.یک بایت رو از کامپیوتر بفرستم(دریافت از میکرو با وقفه)
          2.ارسال همان بایت از میکرو به کامپیوتر(دریافت با کامپیوتر با وقفه)
          3.چک کردن این دو مقدار با هم.

          حالا من مشکلی که دارم اینه که برنامه نویسی VB ضعیف هستم و دستورات وقفه ای رو بلد نیستم(در ضمن نوع ارتباط من فقط 3 سیم RXD TXD GND داره)
          چجوری دریافت وقفه ای توی کامپیوتر داشته باشم؟(اینجوری میشه یه بلوک از دیتا رو با یه بلوک مقایسه کرد)
          می بینیم و نادیده می گیریم!

          دیدگاه


            #6
            پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا

            منطق راحتیه. اماسوتی شدیدی ممکنه بده:
            1- شما 1 رو میفرستی.
            2- میکرو هم 1 رو میفرسته. ولی بخاطر نویز 2 دست شما میرسه.
            3- حالا قراره شما دوباره بفرستی. میکرو از کجا بفهمه این بایت جدید کدوم بایته؟ بایت قبلی که دوباره ارسال شده یا بایت جدید؟

            الزاما هر چیز ساده ای بهترین نیست.

            دیدگاه


              #7
              پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا

              نه دیگه نمیذارم سوتی بده.
              چون من سرعت بالا لازم ندارم و دقت بالا می خوام.این کارو می خوام انجام بدم.
              1.یک بایت رو از کامپیوتر بفرستم(دریافت از میکرو با وقفه)
              2.ارسال همان بایت از میکرو به کامپیوتر(دریافت با کامپیوتر با وقفه)
              3.چک کردن این دو مقدار با هم.اگه درست بود یه بایته دیگه ارسال میشه مثلا 13 و اگه اشتباه ff.
              4.اگه درست باشه بایت جدید و اگه اشتباه بود تکرار بایت قبلی.

              قبول دارم که سرعت 3 برابر کم میشه(اگه بلوکی بفرستیم تا 2 برابر کم میشه) اما دقت 100% خواهد بود.این ایده منه شاید روش بهتری هم باشه اما من بلد نیستم.اگه شما تجربه ای دارین لطفا بگین؟
              می بینیم و نادیده می گیریم!

              دیدگاه


                #8
                پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا

                بیا اینکارو بکن:

                فرض بر اینه که میکرو قراره 1000 بایت بگیره!
                با هر بار ارسال 10 بایت بفرست بفرم زیر:


                Dim SendBCC As Byte
                Dim Data(10) As Byte

                Sub SendByte(Dim C As Byte)
                SendBCC = SendBCC Xor C
                ' Send <C> to serial port then...
                End Sub

                Sub SendData(ByVal Start As Word)
                Dim I As Integer

                Do
                SendByte( 2 )
                SendBCC = 0
                SendByte( INT( Start / 256 ) )
                SendByte( INT( Start Mod 256 ) )

                For I = 1 To 10
                SendByte( Data(I) )
                Next I
                SendByte( SendBCC )
                Loop Until RecvByte() = 5
                End Sub


                در این صورت اگر 10 بایت مربوطه توسط میکرو درست دریافت بشه میکرو بایت 5 رو میفرسته و در غیر اینصورت مثلا بایت 15 رو. اینجوری میشه تا 600 کیلو بایت هم دیتا فرستاد.

                توی میکروش هم فعلا یه کمی فسفر بسوزونین تا بعد.

                توضیح: من بیسیک بلد نیستم. با این مثلا کد فقط خواستم متد رو شرح بدم.

                دیدگاه


                  #9
                  پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا

                  با درود.
                  توی برنامه شما 10 بایت دیتا و یک بایت تشخیص خطا (xor ده بایت دیتا) ارسال شده است.(تا اینجا درست)
                  مشکل من در VB هنگام دریافت اون 5 هست که میکرو میفرسته .
                  آیا شما اونو با رویداد On_com در Mscomm گرفتین و به صورت وقفه ای بوده؟یا اینکه با تایمر مدام پورت رو می خونین؟
                  می بینیم و نادیده می گیریم!

                  دیدگاه


                    #10
                    پاسخ : کمک در ارسال دیتا از کامپیوتر به میکرو بدون خطا

                    من با VB کار نمیکنم. اینجور مواقع هم یک کار راحت میکنم. یک thread میذارم برای خوندن از سریال. حالا نمیدونم این کارو میشه با mscom انجام داد یا نه.

                    دیدگاه

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