اطلاعیه

Collapse
No announcement yet.

ایجاد ارتباط میکرو (بدون خطا ) با پورت سریال ؟

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

    ایجاد ارتباط میکرو (بدون خطا ) با پورت سریال ؟

    من با میکرو دیتا به لب ویو می فرستم
    به این شکل AA@@@@@@@BB ، که این @ ها ، اعدادی هستند که توسط میکرو به لب ویو ارسال شده
    AA و BB هم گذاشتم که ، سر و ته دیتامو بدونم کجاست
    حالا بعضی وقتا لب ویو درست این دیتا ها رو درست نمیخونه
    حالت درستش اینه ( با هایپر ترمینال هیچ خطایی نداره ! ) اما با لب ویو هر چند خط خطا داره
    AA@@@@@@@BB
    AA@@@@@@@BB
    AA@@@@@@@BB
    و ...
    حالت غلطش هم به اینه شکل هست
    AA@@@@@@@BB@@@
    AA@@@@@@@
    BB
    @@AA@@@@@@@BB
    چی کار کنم که درست بخونه !؟

    #2
    پاسخ : ایجاد ارتباط میکرو (بدون خطا ) با پورت سریال ؟

    راهشو پیدا کردم
    یه VISA SET I/O BUFFER SIZE گذاشتم قبل VISA READ درست شد
    اگه کسی راه بهتری بلده پیشنهاد بده

    دیدگاه


      #3
      پاسخ : ایجاد ارتباط میکرو (بدون خطا ) با پورت سریال ؟

      اندازه بافر در حالت پیش فرض 1024 بایت هست که برای کار شما خیلی هم زیاده. علت عدم دریافت صحیح رو در نوع برنامه نویسی باید جستجو کنین

      دیدگاه


        #4
        پاسخ : ایجاد ارتباط میکرو (بدون خطا ) با پورت سریال ؟

        یه الگوریتم مناسب و خوب برای دریافت از پورت سریال به چه شکلی هست ؟ ( از چه چیزایی باید استفاده کنم ؟ )

        دیدگاه


          #5
          پاسخ : ایجاد ارتباط میکرو (بدون خطا ) با پورت سریال ؟

          شما خودتون قید کردین که اعداد بین کاراکتر های A و B محصور هستن. خوب کافیه کاراکتر به کاراکتر دریافت کنین و به یک رشته اضافه کنین. این رشته فقط موقعی آماده پردازش هست که دو حرف A در ابتدای اون باشه و 2 حرف B در انتهای اون. مسلما بعد از دریافت هر کاراکتر و اضافه کردن به رشته باید چک بشه که اگه دو کاراکتر B در انتهای رشته وجود داره برای چک های بعدی و پردازش استفاده بشه و بلافاصله رشته هم خالی بشه. اینجوری مشکل شما حل میشه.

          دیدگاه


            #6
            پاسخ : ایجاد ارتباط میکرو (بدون خطا ) با پورت سریال ؟

            مهندس آقازاده ، خودم هم A و B رو برای همین گذاشتم
            اما نتونستم برنامشو در بیارم :sad: ، شاید زیادی سادس :redface:
            میکرو همه این دیتا ها رو یکجا میفرسته ، ودرست هم میفرسته ( تو هایپر ترمینال هیچ خطایی نداره ! ) ، اما بعضی وقتا لب ویو بد میگیرشون
            این که گفتید ( بلافاصله رشته هم خالی بشه ) رو چی جوری خالیش کنم ؟
            یه کوچولو توضیح میدین !

            دیدگاه


              #7
              پاسخ : ایجاد ارتباط میکرو (بدون خطا ) با پورت سریال ؟

              ممنونم ، به جواب رسیدم AA و BB رو جدا کردم ، و شرط گذاشتم اگه درست بود ، رو رشته کار بکنه :nice:

              دیدگاه


                #8
                پاسخ : ایجاد ارتباط میکرو (بدون خطا ) با پورت سریال ؟

                سلام. ببینید راه درستش اینه که زمانی که شما در ابتدا و انتهای رشته ارسالی از میکرو کاراکترهای کنترلی قرار میدید از اسمش مشخصه که باید کنترل بشه. شما شروع میکنید به ارسال دیتا و در اونطرف هم به صورت پشت سر هم دریافت میکنید. اولا که باید از یه تابع byte at serial port حتما استفاده کنید. بعد از این کار به راحتی با یه چک ساده توسط یه ساختار شرطی شروع به دریافت میکنید. زمانی که دومین حرف A را دریافت کردید شروع به ذخیره رشته میکنید و این کار رو تا زمان دریافت اولین کاراکتر B انجام میدید. وقتی دومین کاراکتر B رو هم دریافت کردید رشته ذخیره شده رو پردازش میکیند و این حلقه همین طور ادامه پیدا میکنه..

                دیدگاه


                  #9
                  پاسخ : ایجاد ارتباط میکرو (بدون خطا ) با پورت سریال ؟

                  من اینطوری درستش کردم
                  http://ifile.it/o0creyh/PORT SERIAL.rar
                  اشکالام رو میگید ؟ :rolleyes:

                  دیدگاه


                    #10
                    پاسخ : ایجاد ارتباط میکرو (بدون خطا ) با پورت سریال ؟

                    دوست عزیز با توجه به بحث های زیادی که تو ارتباط سریال بین میکرو و لب ویو شده بازم شما از یه راه عجیب و غریب رفتین سراغش. برنامه دارای اشکال فاحشیه. با هم دیگه یه مروری میکنیم بر این شاهکار شما :
                    لحظه اول شما یه رشته رو میخونید. احتمال میدیم رشته شما همون AA@@@@@@@BB باشه. بعدش میائید دو کاراکتر ابتدا و انتها رو از رشته خارج میکنید و مقایسه انجام میدید. بعد با یه تابع and و یه ساختار case در صورت برقرار بودن شرایط شما دوباره عمل خوندن رو انجام میدید. اشکال بزرگ شما اینجاست. هنوز حلقه تکرارش پایان نشده که شما بخواهید دوباره بخونید. یه اشکال دیگم که هم هست اینه که شما خروجی تابع byte at serial port رو دادید به شرط ساختار case اصلیتون. بعد گفتید اگه ۱ بود برنامه عملیات خوندن رو انجام بده. ببنید دوست عزیز لب ویو و میکرو دیتا رو به صورت بایت به بایت ارسال میکنند. تابع byte at serial port کل حجم ارسالی از میکرو رو به صورت یکجا محاسبه میکنه. دیتای شما ۱۱ بایته نه یک بایت. شما باید خروجی این تابع رو به این صورت که اگه از صفر بزرگتر باشه یا نه مقایسه کنید. راه حل شما اینه که یه ساختار ترتیبی در برنامه قرار بدید. اول مقایسه کنید ببینید کاراکتر ورودی A هست یا نه بعد برید به فریم بعدی. بعد با مقایسه اینکه کاراکتر ورودی B هست یا نه رشته رو دریافت کنید. تو هر فریم هم باید از یه تابع read استفاده کنید.

                    خواهش میکنم اول بشینید قشنگ برنامه رو آنالیز کنید...

                    دیدگاه

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