آموزش راه اندازی USB CDC توسط EasyMCU

آموزش راه اندازی USB CDC توسط EasyMCU

آموزش راه اندازی USB CDC توسط EasyMCU : یکی از مهمترین ، کارامدترین و جذابترین پروژه های ممکن تبادل اطلاعات بین کامپیوتر و دستگاه الکترونیکی ساخته شده توسط ما می باشد. به این ترتیب می توانیم اطلاعاتی را از دستگاه دستساز به کامپیوتر انتقال دهیم و همچنین انتقال اطلاعات در جهت عکس یعنی از کامپیوتر به دستگاه دستساز ما میسر می باشد. در این مقاله از کلاس CDC از USB استفاده می کنیم.

CDC سرنام کلمات Communication Device Class می باشد. دستگاه USB  که از کلاس CDC استفاده می کند، پس از اتصال به کامپیوتر، به صورت یک COM مجازی سمت کامپیوتر شناخته می شود و معمولا نیاز به درایور دارد. کامپیوترهای قدیمی تر شامل یک سری پورت 9 پین با اینترفیس RS-232 بودند که امروزه تقریبا منقرض شده اند. استفاده از USB و کلاس CDC جایگزین مناسبی برای این اینترفیس می باشد.

برای درک بهتر در نظر بگیرید

  1. دستگاه دستساز ما با استفاده از انواع سنسورها اطلاعات محیط را دریافت می کند و در صورت نیاز پردازش هایی را روی اطلاعات انجام می دهد و این اطلاعات را به کامپیوتر می فرستد و سمت کامپیوتر اطلاعات نمودار می شود و به این ترتیب دستگاه دستساز ما تبدیل به یک دیتا لاگر شده است!
  2. یا یک نرم افزار رابط کاربر در سمت کامپیوتر وجود دارد که امکان تنظیم و کنترل اجزای مدار را میسر می سازد، در سمت دیگر انواع موتورها ، روشنایی و عملگرها و سنسورها به دستگاه دستساز ما متصل است، به این ترتیب دستگاه دستساز فرامین اجرایی را از کامپیوتر دریافت کرده و عملگرها را کنترل می کند و مقادیر سنسورها را به کامپیوتر گزارش می کند. به این ترتیب دستگاه دستساز ما تبدیل به یک سیستم کنترل مرکزی شده است!
  3. و یا …

علاوه بر پروژه های بالا، در زمان برنامه نویسی دستگاه دستساز خود، ممکن است احتیاج به چک کردن و یا رفع اشکال یا به اصطلاح دیباگ ( Debug ) کردن کدهای خود داشته باشید. با فرستادن اطلاعات در محیط ترمینال کامپیوتر نیز می توانید این موارد را مرتفع کنید و … .

لازم به ذکر است که روش ها و پروتکل های مختلفی برای تبادل اطلاعات بین یک دستگاه با کامپیوتر وجود دارد ، اما با گذر زمان خیلی از روش ها منقرض شدند و پروتکل USB رفته رفته مطرح تر و همه گیر تر شد. به حدی که در حال حاضر همه ی دستگاه ها مجهز به پوت USB شده اند و امروزه این ویژگی یک مشخصه ی کلیدی و حیاتی برای هر دستگاه به حساب می آید.

بردهای مبتنی بر میکروکنترلرهای قدیمی تر که واحد USB ندارند برای ارتباط با USB احتیاج به یک برد واسط دیگر به نام مبدل سریال به USB دارند که این برد واسط هم حجم مدار و هم هزینه تمام شده دستگاه را افزایش می دهد.

انتخاب دیگر برای ساخت دستگاه های دستساز خود استفاده از بردهای مبتنی بر میکروکنترلرهای جدیدتر می باشد که دارای واحد USB می باشند و نیازی به مبدل سریال به USB ندارند!  البته راه اندازی و کار کردن با واحد USB احتیاج به اطلاعات بیشتر و تخصصی تری دارد که استفاده کننده ها را تا حدی می تواند به چالش بکشد. با این حال بردهایی وجود دارند که علاوه بر سخت افزار آماده ، پشتیبانی نرم افزاری و کتابخانه های آماده دارند و کار طراحی و برنامه نویسی را ساده می کنند.

راه اندازی واحد USB_CDC با Zcross

برد Zcross یکی از بردهایی است که در سایز کوچک خود دارای یک واحد USB می باشد. همینطور با بهره گیری از ایده ی Easy MCU ، راه اندازی واحد USB در حد یک تیک زدن، و کار کردن با واحد USB در حد یک خط کد ساده می شود!

تمام مواردی که در ادامه آمده اند، به همراه روش نصب درایور USB CDC در ویدئوی ذیل موجود می باشد.

آموزش راه اندازی USB CDC توسط  EasyMCU :

دانلود ویدئو از مدیا فایر

مراحل راه اندازی واحد USB_CDC با Zcross به این ترتیب می باشد …

یک پروژه ی جدید با نام دلخواه بسازید.

نام پروژه را در کادر مشخص شده وارد کرده و روی دکمه ی New project کلیک کنید.

نام پروژه به لیست پروژه ها اضافه می شود، اطمینان حاصل کنید که پروژه در حالت انتخاب باشد.

در نرم افزار Easy MCU به تب USB\CAN\EMAC بروید و مطابق تصویر فوق تیک گزینه ی USB را بزنید.

به تب Generate بروید و روی دکمه ی Generate کلیک کنید تا پروژه و فایل های مربوطه تولید شود.

روی دکمه ی Run project کلیک کنید تا Keil باز شود. در Keil از دسته ی Source روی main دابل کلیک کنید.

برای فرستادن اطلاعات از Zcross به کامپیوتر از متودهای print() و write() می توانید استفاده کنید.

سینتکس  Easy MCU به شرح ذیل است:

 

برای خواندن اطلاعات ارسالی از کامپیوتر به Zcross از متودهای read() ، readBytes() ، readString() می توانید استفاده کنید.

البته قبل از اینکه بافر را بخوانیم باید دید اطلاعاتی برای خواندن موجود هست یا نه. برای فهمیدن این مورد از متود available() و دستور شرطی if() استفاده می کنیم.
 

خوب به عنوان یک مثال ساده در محیط ترمینال Easy MCU یک کاراکتر را وارد می کنیم و به سمت Zcross می فرستیم. Zcross کاراکتر فرستاده شده از سمت کامپیوتر را می خواند و مقدار کد اسکی (ASCII) کاراکتر را در قالب جمله ای به سمت کامپیوتر ارسال می کند و در محیط ترمینال نمایش می دهد.

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

برنامه ی مد نظر در main.cpp قرار می گیرد و به شرح ذیل است:

 

پس از نوشتن برنامه ی فوق در main.cpp روی آیکون مشخص شده کلیک کنید تا برنامه ی نوشته شده به زبان ماشین ترجمه ( کامپایل compile) شود. دقت کنید که گزارش کامپایل باید حاوی تعداد 0 خطا ( Error ) باشد.

سپس دکمه ی روی Zcross را زده تا Zcross وارد مود بوت لودر شود. حالا از نرم افزار Easy MCU روی دکمه ی Program کلیک کنید تا Zcross برنامه ریزی شود.

بعد از پروگرام شدن Zcross روی Terminal کلیک کنید تا محیط ترمینال باز شود.

پورت COM مناسب را انتخاب کنید و روی click to open port کلیک کنید.

کاراکتر مد نظر را وارد کنید و روی send کلیک کنید.

لطفا هرگونه سوال و … راجع به این مطلب را در انجمن ایزی.ام.سی.یو مطرح نمایید.