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