اطلاعیه

Collapse
No announcement yet.

Handshaking در ارتباط سریال با FT232BL ( استفاده از خطوط CTS/RTS )

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

    Handshaking در ارتباط سریال با FT232BL ( استفاده از خطوط CTS/RTS )

    درود به همه
    برای پروژه ی پایان نامه ام نیاز هست که پس از دریافت یک آرایه ی 34 بایتی از سمت کامپیوتر، میکروکنترلر به صورت پیوسته یک آرایه ی 34 بایتی رو به کامپیوتر ارسال کنه. این پیوستگی رو با تایمر ایجاد کردم ( 100 بار در ثانیه که بعدا باید به 1000 بار در ثانیه افزایش پیدا کنه ) و برای جلو گیری از تلف شدن وقت CPU حین ارسال از وقفه ی تکمیل ارسال هم استفاده کرده ام. اما در آزمایش ها هم با MATLAB و هم با #C . متوجه ی تغییر در ترتیب بایت های بافر ارسال میشم. برای تست بایت START و STOP ( برای مثال 0xAA که میشه 170 دسیمال ) و اعداد 1 تا 32 رو توی بافر ارسال گذاشتم و به بع کامپیوتر ارسال کردم. به این صورت:
    170 1 2 3 . . . 30 31 32 170
    توی برنامه سمت PC از EVENT یا همون وقفه ی دریافت استفاده کردم که بعد از هر 34 بایت یک بار بافر رو ذخیره کنه. این تغییری که میگم اتفاق میفته به این صورته که مثلا بعد از دریافت حدود 400 تا 500 بار آرایه، جای بایت استارت یا استاپ جابجا میشه. یک جور شیفت پیدا میکنند. مثلا این جوری میشه:
    170 170 1 2 3 ..... 32
    یا شکل های مختلف دیگه. آیا احتمال اینکه بایتی از دست بره و باعث این مشکل بشه هست؟
    - از مبدل USB->SERIAL FT323L ، ATMEGA8 ، CRYSTAL 14.7456 استفاده کردم. و باود ریت های مختلف از 57600 تا 460800 رو تست کردم همه شون با کمی تفاوت همین جواب رو دادند.
    - چون اول فکر میکردم ایراد از دریافت سریال توی متلب هست پروژه رو یک بار هم با C# انجام دادم که تقریبا همون نتیجه رو میده.
    - در برنامه وقفه های تکمیل تبدیل مبدل آنالوگ به دیجیتال و وقفه ی تایمر برای ایجاد چند موج PWM و زمان بندی ارسال دیتا هم اجرا میشه آیا امکان داره توی این وقفه ها بافر ارسال یا اشاره گر بایت جاری در حال ارسال دستکاری بشه؟
    در صورت نیاز بفرمایید تا سورس کد ها رو بگذارم.
    پیشاپیش از توجه تون سپاسگزام

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

    خوب ممنون از این همه توجه
    وقفه ها رو همه یرداشتم و میکرو فقط ارسال میکنه. اما مشکل هنوز به قوت خودش باقیه. آیا امکان داره از مبدل ft232 باشه؟
    ممنون میشم کسی راهنمایی کنه از دوستان.

    دیدگاه


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

      خب بعد از کلی تحقیق و این در و اون در زدن فهمیدم که باید از RTS , CTS برای HANDSHAKE استفاده کنم.
      توی دیتاشیت FT232 نوشته وقتی آماده ی دریافت باشه RTS رو صفر (0) میکنه و توی میکرو با چک کردن این پایه شرط برا ارسال گذاشتم. و CTS از FT232 رو هم به زمین وصل کردم و توی تنظیمات پورت سریال توی DEVICE MANAGER ، FLOW CONTROL را روی HARDWARE گذاشتم. اما انگار پایه ی RTS همیشه صفر هست و میکرو باز هم مثل قبل ارسال میکنه و باز هم نتیجه مثل قبله . و بعد از دریافت حدود 100 بسته دیتا یک سری از بایت های دیتا از دست میره و یه جور شیفت پیدا میکنند.
      خودم حدث میزنم چون سرعت ارسال دیتا از سمت میکرو بالاست باید یه جوری با FT232 سینک بشه. اگه کسی با HANDSHAKING کار کرده لطفا راهنمایی کنه.
      سپاس

      دیدگاه


        #4
        پاسخ : Handshaking در ارتباط سریال با FT232BL ( استفاده از خطوط CTS/RTS )

        با پایین آوردن بادریت به 230400 و استفاده از خط RTS مسئله حل شد. و دیتا به درستی دریافت میشه. اما اینکه چرا در بادریت های بالاتر مانند 460800 و 921600 خطا در ارتباط هست کسی میتونه راهنمایی کنه؟
        سیم ارتباط سریالم حدود یک متر، بواسطه ی یک کانکتور 1X5 SIL به میکرو وصل شده و مبدل هم مستقیم به USB وصل شده. در ضمن آی سی مبدل FT232BL هست. امکان داره جنس آی سی روی این مسئله تأثیر داشته باشه؟

        دیدگاه

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