کار با پورت USB در دسته Device در خوشه ی CDC با درایو VCP
پورت USB خود دارای چند خوشه است. موس، کیبرد، مودم، پرینتر، گیم پد و ... از خوشه های یکسانی استفاده نمی کنند. 256 خوشه وجود دارد! در ادامه چند تاش ذکر شده است
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
هر دستگاه USB جز یکی از 3 دسته زیر است
1- ابزار Device
2- مهمان Host
3- همزمان ابزار و مهمان Dual
دو راه برای ارتباطی برای USB وجود دارد
1- ارتباط مستقیم یک به یک (یکی مهمان و دیگری ابزار)
2- ارتباط چند به یک ( یک مهمان و بقیه با هاب به مهمان وصل می شوند)
همان طور که دیده می شود به علت تنوع خوشه ها ، دسته ها و راه ارتباطی نوشتن برنامه کار USB کار هر کس نیست. همچنین علاوه بر نوشتن برنامه میکرو ، لازم است برای کامپیوتر نیز درایور نوشت!!!
مزیت زبان سی پلاس پللاس نسبت به اسمبلی وجود کتابخانه ها، کلاس ها و توابع است. پس با استفاده از کتابخانه مناسب مشکل برنامه نویسی کاملا حل می شود.
به علت تنوع روش ها و ... کتابخانه استانداردی وجود ندارد.
هر چند نرم افزار CooCox CoIDE کتابخانه های برای کار با USB قرار داده، اما کار نمی کند و مشکلات کد نویسی دارد!
چهار ماه پیش کاربر xenovacivus در یکی از سایت ها ! کد اصلاح شده کتابخانه کار با پورت USB در دسته Device در خوشه ی CDC با درایو VCP را منتشر کرد! کتابخانه را می توانید از لینک زیر دانلود کنید.
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
درایور آن را هم می توانید از سایت ST دانلود کنید:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ابتدا درایور را نصب کنید و سپس رایانه یتان را ریستارت نماید
برنامه نویسی میکروکنترلر جهت کار پورت USB در دسته Device در خوشه ی CDC با درایو VCP
اکنون یک پروژه جدید بسازید ، در مخزن تیک های CooCox CoIDE تیک های GPIO - EXTI - USART - MISC را فعال کنید.
کتابخانه را در پوشه ی پروژه کپی نمایید. سپس آن را به پروژه خود بیافزایید.
قبل تابع اصلی (main) دستورات زیر را وارد کنید.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دستور زیر به میکروکنترلر می گوید که کریستال خارجی ات 8 مگا هرتز است. این دستور برای افزایش دقت (زمانی) برنامه اضافه کردیم. از این به بعد در تمامی برنامه های که می نویسید از این دستور استفاده کنید.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کتاب خانه های زیر به ترتیب شناسایی میکرو، پروت های ورودی خروجی، کلاک و وقفه (اینتراپت) است.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کتابخانه های زیر همان کتاب خانه های پورت USB هستند.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چون شما مبتدی هستید بهتر است چند خطی که بعد از سرامد ها آمده است را بدون این که بدانید چه کار می کنند کپی کنید. وقتی که کاملا حرفه ای شدید بعدا به سراغشان بیاید.
SystemInit
تابع زیر جهت فعال سازی کلاک سیستم است و کاربرد آن منحصر به USB نمی شود
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از این به بعد این تایع را در تمامی برنامه های که می نویسید اضافه کنید. (در ایتدای تابع اصلی)
USBD_Init
تابع زیر برنامه می فهماند که شما می خواهد از بین کلیه روش های موجود در USB فقط و فقط از دسته Device در خوشه ی CDC با درایو VCP استفاده کنید
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
put_char
تابع زیر یک کاراکتر را ارسال می کند.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به عنوان مثال:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
put_char
تابع زیر یک کاراکتر را می گیرد می کند.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به عنوان مثال:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
send_str
تابع زیر رشته را می فرستد
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به عنوان مثال:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
get_string
تابع زیر یک رشته را می خواند.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به عنوان مثال:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برنامه نویسی کامپیوتر جهت کار پورت USB در دسته Device در خوشه ی CDC با درایو VCP
VCP برگرفته از عبارت Virtual COM Port است. یعنی ویندوز فکر می کند که پورت USB اش حذف شده است و پورت COM به سیستم اضافه شده است.
شما می توانید برنامه های بنویسید (با استفاده از کتاب خانه های دیگر یا با استفاده از اسمبلی) که کامپیوتر فکر کند پورت موازی دارد یا فکر کند USB به موس وصل شده است و ...
چون این جا به برنامه نویسی کامپیوتر و زبان های گوناگون آن بستگی دارد نمی توانم تمام روش هایش را بگویم. معمولا این جور کار ها (برنامه با سرعت اجرای پایین) را با زبان پایتون می نویسند. در ادامه فقط به برنامه نویسی متلب اشاره می کنم
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خط اول تعریف می کند که سخت افزار چیست. تنظیماتش در کنترل پنل قسمت دیوایس منیجر موجود است.
خط دوم پورت را باز می کند.
حط سوم کلمه ی Robotics می کند
خط چهارم پورت را می خواند.
خط آخر پورت را می بندد.
در برنامه نویسی متلب بستن پورت ضروری است. اگر برنامه یتان وسطش خطا داد به تنهایی این دستور را اجرا کنید تا بتوانید مجددا از این دستورات فوق استفاده کنید.
در کامپیوتر من پورت COM6 نامیده شد. شما باید شماره پورت را در کنترل پنل قسمت دیوایس منیجر ببینید و از آن استفاده کنید.
مثال
برنامه ای بنویسید که با ارسال اول حرف هر رنگ (به در حرف درشت) از طریق کامپیوتر، مقدار LED متناظر آن روی برد تغییر وضعیت دهد.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تمرین
در تمرینات زیر علاوه بر برنامه میکرو ، برنامه کامپیوتر را نیز بنویسید:
1- برنامه ای بنویید که رشته "Robotics Engineering" را به کامپیوتر ارسال کند. سپس کامپیوتر آن را مجدد به میکرو ارسال کند، در صورتی که عبارت درست ارسال شده بود چراغ سبز روشن شود و در صورتی که اشتباه شده بود چراغ قرمز روشن شود و دوباره رشته ارسال شود و این کار ادامه پیدا کند تا رشته درست ارسال شود.
2- برنامه شماره 1 را طوری بنویسید که حرف به حرف ارسال و تایید شود. برای تایید حرف به حرف می توانید از کارکتر های - و = برای اطمینان از صحت ارسال استفاده کنید.
3- برنامه ای بنویسید که با ارسال رشته "Traffic Lights" برد عمل چراغ راهنمایی اجرا دهد. در صورت ارسال رشته "Flashing Red" چراغ قرمز چشمک زن، در صورت ارسال رشته "Flashing Yellow" چراغ قرمز چشمک زن و در صورت ارسال "Off" همه ی LED ها خاموش شوند.
4- برنامه بات را بنویسید. در این برنامه برد به رشته ها جواب می دهد. مثلا اگر "Salam" در یافت کرد رشته ی "Salam Alaykom" را ارسال کند و یا مثلا وقتی "smkdgjnspkrjg" در یافت کند عبارت "I do not know" را ارسال کند و ...
5- برنامه شبیه ساز ربات تعقیب خط با پنج سنسور را بنویسید. در این شبیه ساز داده ها (اطلاعات سنسور) ار کامپیوتر ارسال می شوند و ربات پس از تحیلی سرعت هر موتور را به کامپیوتر ارسال می کند.