به نام خدا : همونطور که میدونید میکروکنترلر lpc1768 استفاده پروتکول usb رو داره، که برا این مورد، حتی کلاک جداگانه ای هم داره، در فصل 11 و 12 و 13 دیتاشیت درباره راه اندازی این پروتکول صحبت شده ( که در آینده، مطالبش رو قرار میدم )، که ما با فصل 11 کار داریم که عنوانش USB device controller هستش، یعنی میکروکنترلر در نقش device ( بحث دستگاه و میزبان و … در مطلب آموزش usb به صورت کامل گفته میشه )، ما قبلا برای ارتباط میکرو با pc میومدیم در سمت میکرو از پروتکول UART و در سمت PC از نرم افزار های ارتباط سریال و از ماژولهای USB TO TTL به عنوان مبدل/واسط بین میکرو و PC استفاده میکردیم، که خب قیمت این مبدل هم چیزی حدود 10-20 تومن هستش، که در تولید مدار مد نظر در تعداد بالا، قیمت این آیسی خودشو نشون میده!، حالا جدا از این که این آیسی فضایی از برد اشغال میکنه!، و بطبع اندازه PCB و قاب مدار ممکنه بزرگ بشه و …، و این که سرعت UART کجا، سرعت USB کجا، خطای چند درصد UART کجا، خطای 0 درصد USB کجا و… فک کنم با همین توضیحات قانع شدید که برید سمت استفاده از پروتکول USB
در این مطلب از کتابخونه ای استفاده میکنیم که در اصل من از سایت زیر پیدا ( دانلود ) کردمش ( سرویس blogspot ایران رو تحریم کرده، باید از قند شکن استفاده کنید اگه دوست دارید لینک زیر رو ببینید ) که این کتابخونه برا C هستش که من تغییراتی توش دادم و به ++C تبدیلش کردم، هر دو کتابخونه رو میتونید از ته مطلب دانلود کنید :
LPC17xx Virtual COM port – A USB CDC Class device library
توابع کتابخونه : کتابخوانه فوق، حاوی توابع زیر هستش که در فیلم توضیح دادم و از اسمشون هم عملکردشون معلومه.
1 2 3 4 |
void init(); uint16_t available(); void write(uint8_t c); uint8_t read(); |
کد پروژه : عملکرد پروژه اینه که یه سری کاراکتر رو در هر 100mS ارسال میکنه به PC و اگه هم دیتایی باشه، میخونه و همونو دوباره میفرسته برا PC، تو PC هم به کمک نرم افزار ارتباط سریال به پورت مد نظر وصل میشیم و دیتا رو میخونیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include "public_library.h" #include "clock.h" CLOCK clock; #include "usbSerial.h" USB_VIRTUAL_COM USBvc; #include "delay.h" DELAY delay( 0/*timer_number*/ ); int main() { clock.init(); USBvc.init(); while(1) { // Write for(uint8_t i='A'; i<='z'; i++) USBvc.write(i); USBvc.write('\n'); // Read while( USBvc.available() ) USBvc.write( USBvc.read() ); // Delay delay.timer_ms(100); } } |
شماتیک پروژه : پایه های کابل USB ( که 4 تا پایه داره : GND و VBUS و +D و -D ) رو به همون پایه ها در میکرو وصل کنید، تغذیه میکرو هم وصل باشه یا این که از همون پایه VBUS کابل USB تامین بشه ( بیشتر از 100mA نکشید فقط )
اتصال نرم افزار ارتباط سریال به پورت مد نظر ما : بعد از وصل شدن تغذیه میکرو و وصل شدن کابل USB مربوطه به PC، میکرو شناسایی و پیکربندی میشه و ارتباط برقرار میشه ( اگه از هدربرد ECA استفاده میکنید، چراغ قرمز رنگ روشن میشه ) بعد میرید تو Device manager میبینید که دستگاه رو کدوم پورت سوار شده، بعد میاید تو نرم افزار ارتباط سریال، پورت رو تنظیم میکنید، تنظیم مقدار Baud rate هم مهم نیست.
فیلم پروژه : https://www.aparat.com/v/CsqYH
دانلود تمام فایل های مورد نیاز این پروژه :
داخل پوشه main lib، کتابخونه اصلی که دربارش صحبت کردم قرار داره.
داخل پوشه USB VIRTUAL PORT KeilV5 کتابخونه ای که تغییر دادم + پروژه قرار داره.
فایل usbser.inf که درایمر سمت pc هستش که باید نصب کنید.
پوشه “بررسی اطلاعات تبادل شده” حاوی یه سری اطلاعات رد بدل شده بین میکرو و pc هستش که به کمک لاجیک آنالایزر تهیه شده، دوست داشتید میتونید کدهاشو بررسی کنید.
ممنون از شما، امیدوارم این مطلب مفید باشه براتون، فعلا یا علی.
این عکسو چند وقت پیش تو نت دیدم، نظرتون چیه دربارش؟ ( این چیزی که میبینید در عکس بالا، از قول آقای نوبخت زده شده، این آقا قبلا همچین حرفی زده، تو آرشیو سایت های خبری میتونید پیدا کنید )
جنگ ما فتح قدس را در پی خواهد داشت (امام خمینی) >>>>>> اگر از صدام بگذریم، اگر مسأله قدس را فراموش کنیم، اگر از جنایت های امریکا بگذریم از آل سعود نخواهیم گذشت. انشاالله اندوه دلمان را را در وقت مناسب با انتقام از امریکا و ال سعود برطرف خواهیم کرد و داغ و حسرت حلاوت این جنایت بزرگ را بر دلشان خواهیم گذاشت و با برپایی جشن پیروزی حق بر جنود کفر و نفاق و آزادی کعبه از دست نااهلان و نامحرمان به مسجد الحرام وارد خواهیم شد (امام خمینی)
فعلا دارم رو USB و میکرو LPC کار میکنم، 3 تا موضوع مطرح هستش ( که تو ذهنمه هر3شو برم ) :
1) میکرو در نقش Device ( فعلا محوریت کار من این مورد هستش )
2) میکرو در نقش Host
3) میکرو در نقش OTG
و باز 2 تا موضوع مطرح هستش، برا راه اندازی usb دو تا راه داریم ( که تو ذهنمه هر2شو برم ) :
1) استفاده از میکروکنترلر ( فعلا محوریت کار من این مورد هستش که از LPC1768 استفاده میکنم )
2) استفاده از آیسی های مختص اینکار.
فعلا کارم با دیتاشیت usb تموم شده، دارم کلاس های usb رو مطالعه میکنم، کلاس cdc رو ماستمالی کردیم و یه پروژه ازش منتشر کردیم، الان رو کلاس HID ریز شدم و دارم مطالعه میکنمش و پروژه ازش میزارم تو سایت.
جزئیات داستان رو در لینک زیر میتویند ببینید :
===
به علت اثطغبال بیش از حد دوستان از موضوع usb؛ فعلا یکم سرگرم طراحی قالب جدید سایت شدم ^_^
سلام خسته نباشید
اول جا داره که تشکر کنم از آموزش های خوبتون … متشکریم
چند تا سوال داشتم :
اول اینکه اموزش های USB ادامه داره ؟؟
بعد اینکه چرا LPC17xx ؟؟ الان خیلی ها دارن از STM ها استفاده میکنن … البته من چند وقته که پروژه انجام ندادم . یه جورایی حس میکنم LPC17xx ها داره فراموش میشه … شاید هم نه
من چند ساله که با سایتتون آشنا هستم و سر میزنم اما فعالیت ها و آموزش ها خیلی کاهش یافته . چرا ؟؟
بازم ممنونم از سایت خوبتون
سلام – ممنو ناز شما – لطف دارید.
اگه خدا بخواد و مشکی رخ نده – بله! – فعلا رو HID دارم مطالعه میکنم – انگلیسیم ضعیفه اذیتم میکنه – خدا لعنت کنه مسئولین آموزش پرورش رو!
بگذریم…