اطلاعیه

Collapse
No announcement yet.

obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

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

    #16
    پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط



    فصل سوم : ساختار درایور OBdev USB
    قسمت اول



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

    اول این درایور رو دانلود کنید و توی یه پوشه unzip کنیدش.
    چند تا پوشه می بینید :
    circuits : چند مثال از سیم کشی و نحوه گرفتن تغذیه از خط usb برای Avr هستش.
    examples : یه سری مثال نیمه سنگینه که بعدا بررسی می کنیمشون
    و ...
    اما پوشه ای که باهاش کار داریم :
    usbdrv : شامل آنچه که باهاش کار داریم :agree: فایل های این پوشه رو باید خوب خوب بشناسید.
    اول باید بگم که من تمام برنامه هام رو تو محیط Avr studio می نویسم و همونطور که خیلی ها نمیدونن از ورژن AVR Studio 4.13 به بعد این نزم افزار قابلیت تطبیق با WinAvr رو پیدا کرد و اگه این دو رو روی یه سیستم نصب کنید اتوماتیک WinAVR توی AvrStudio اضافه میشه و شما دیگه دغدغه ساخت makeFile و نبود شبیه ساز و ... رو ندارید.

    حالا یه پروژه میسازیم و کار رو شروع می کنیم. (توضیح فایل های اون پوشه بماند بعدا) :


    در مرحله بعد شبیه ساز رو انتخاب می کنیم :


    و بعد از اون پنجره AVR Gcc رو از مسیر View/Avr Gcc فعال می کنیم. توی این پنجره فایل ها دسته بندی شده هستند.
    ابتدا از پوشه usbdrv در محل ایجاد پروژه کپی کنید و بعد مطابق شکل زیر فایل های درایور obdev را به پروژه اضافه کنید :




    و بعدش هم باید به project\Configuration option بروید و دو تا کار بکنید. اول اینکه مقدار frequency رو برابر 12000000 قرار بدید و دوم اینکه پوشه usbdrv که کپیش کردید کنار پروژه رو به include directorys اضافه کنید.



    حالا راجع به فایل usbconfig.h یه توضیحی بدم. این فایل در ابتدا وجود نداره و شما باید فایل usbconfig-prototype.h را تغییر نام بدید و به usbconfig.h تبدیل کنید.

    محتویات فایل ها :
    usbconfig.h : این فایل 99% چیزی هستش که باید از OBdev USB بدانید. پیکربندی سخت افزاری و device id و vendor id و manfacture name و خیلی دیگه از تنظیمات مربوط به obdev usb توی این فایل هستش. با بقیه فایل ها تقریبا کاری نداریم پس بریم سراغ این فایل :

    پیکربندی سخت افزاری :
    در قسمت Hardware Config در فایل usb config.h بروید. این قسمت شامل :
    الف ) USB_CFG_IOPORTNAME که نام پورتی که پایه های -D و +D را نشان می دهد. از آنجا که در مدار مورد نظر ما (USB ASP) این پایه ها به پورت B وصل شده اند این آیتم را با B مقدار دهی می کنیم.
    ب ) USB_CFG_DMINUS_BIT شماره بیتی از پورت مذکور که پایه -D به آن وصل شده. که باز هم در مدار مذکور می شود 0 . همچنین این پایه حتما باید دارای مقاومت Pullup حدود 1.5 کیلو باشد.
    ج ) USB_CFG_DPLUS_BIT شماره بیتی از پورت مذکور که پایه +D به آن وصل شده. که باز هم در مدار مذکور می شود 1 . همچنین این پایه حتما باید پایه int0 نیز باشد یا به این پایه int0 نیز وصل باشد ، که در مدار ما راه دوم را انتخاب کرده، به همین دلیل پایه PD2 به PB1 وصل شده.
    د ) USB_CFG_CLOCK_KHZ : بی خیالش



    حالا اولین تست رو میگیریم. به فایل اصلی برنامه main.c یا هر چی که اسمش رو گذاشتید برگردید و برنامه زیر رو توش بریزید :


    کد:
    #include "usbdrv.h"
    #include <avr/interrupt.h>
    
    uchar usbFunctionSetup(uchar data[8]) {
    
    	return 0;
    }
    
    int main()
    {
    	usbInit();
    	sei();	//enable all interrupts
    
    	for(;;)
    	{
    		usbPoll();
    	}
    }

    حالا ببینیم این برنامه چیه. اول اینکه این برنامه هیچ کاری انجام نمیده و تنها خودش رو به ویندوز معرفی می کنه و پنجره found new hardware میاد و ... اما :
    در ابتدا باید تابع usbFunctionSetup رو معرفی کنم(تو فایل usbdrv.h کامل کامل توضیح داده) . هموت طوری که گفتیم اندپوینت شماره صفر همیشه باید وجود داشته باشه و از نوع کنترلی باشه. این تابع برای همین منظوره. به این ترتیب که obdev usb سعی می کنه تمام درخواست هایی که از جانب میزبان در مرحله setup فرستاده میشه رو خودش جواب بده. اما اگه خودش نتونست و از این بایت ها سر در نیاورد (تمام خواسته های استاندارد رو ساپورت می کنه و خواسته های من در آوردی رو سر در نمیاره) این تابع رو صدا می کنه و هشت بایتی رو که تو مرحله setup توسط کامپیوتر فرستاده شده رو به این تابع ارسال می کنه. شما موظفید که در این تابع این هشت بایت رو تجزیه کنید و :
    الف ) اگر این خواسته نیاز به جواب داشت (یعنی بیتی که جهت انتقال مرحله بعد رو اعلام می کنه 1 بود و لازم بود تو مرحله تبادل داده اطلاعاتی به کامپیوتر ارسال بشه) دو راه برای پاسخ دادن بهش وجود داره:
    1 : پوینتر usbMsgPtr رو به آرایه ای که جواب توی اون وجود داره ست کنیم و اندازه این آرایه رو برگردونیم


    کد:
    char arr[8];
    uchar usbFunctionSetup(uchar data[8]) {
    
    	usbMsgPtr = arr;
    	return 5;
    }

    2: مقدار تعریف شده (define# شده) USB_NO_MSG رو بر گردونیم. در این صورت درایور برای مرحله تبادل داده تابع usbFunctionRead رو صدا می زنه. این تابع هم رفتار خاصی داره.
    ب ) اگر خواسته نیاز به داده داشت ( یعنی مرحله دیتا نیز اطلاعاتی از کامپیوتر ارسال می شد) باید مقدار USB_NO_MSG را return کنید تا درایور برای مرحله داده تابع usbFunctionWrite را صدا کند. توضیخات مربوز به این تابع بماند.

    توجه کنید که وجود دو تابع usbFunctionWrite و usbFunctionRead اختیاری است و شما می توانید مانند برنامه مثال من ، با return کردن 0 تمام این قضایا را ignor کنید. توجه کنید که خواسته هایی که obdev نمی تواند پاسخ دهد خواسته هایی هستند که برنامه ای که ما در کامپیوتر نوشتیم ارسال می کند. مثلا برای دماسنج می توانیم خواسته من در آوردی get_temprature را ارسال کنیم که ساختار زیر را برای آن در نظر گرفته ام :


    کد:
    bmRequestType = 0xc0 //dev->host,vendor,device
     bRequest = 0xaa //man dar avardi
    Wvalu = ...//no important for man daravardi
    WIndex = ...//no important for man daravardi
    WLenght = ...//no important for man daravardi


    خوب برای امروز بسته. شما توی همون فایل usbconfig.h باز بگردید و بیشتر آشنا بشید. vendor id و device id و ... دیگه چیزی نمونده. جلسه بعدی راجه به دو تابع usbFunctionWrite و usbFunctionRead بیشتر توضیح میدم و بعدش ان شاءالله اولین برنامه رو هم تو کامپیوتر و هم توی میکرو می نویسیم. توجه کنید که برنامه توی کامپیوتر رو با #C مینویسم. اگه از دوستان کسی بتونه برنامه رو با vb , VC++,C++ , delphi و ... بنویسه اعلام آمادگی کنه.
    بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
    اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

    دیدگاه


      #17
      پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط



      فصل چهارم : پروژه دماسنج



      خوب اون دو تابع رو فعلا بی خیال بشید. بریم سر برنامه کامپیوتر.

      برنامه libusbdotnet رو دانلود کنید و نصب کنید. اما یادتون باشه که یه ایراد داره که منو 2 ماهی سر کار گذاشت :angry:
      http://sourceforge.net/projects/libusbdotnet/
      اون ایراد اینه که : اولا این فایل پیوند دهنده فایل libus0.dll هستش که با ++C نوشته شده. ولی فقط با ورژن 0.1.12.1 از این فایل مطابقت داره. اما موقعی که نصب می کنید اشتباها ورژن 0.1.11.0 توی system32 و ... کپی میشه. برای این منظور همیشه فایل LibUsbDotNet.dll رو در کنار دو فایل libusb0.dll و libusb0.sys استفاده کنید(ورژن 0.1.12.1) یعنی اینکه، شما هر برنامه ای که با LibUsbDotNet.dll بنویسید این فایل باید کنار فایل exe شما باشه. حالا من می گم علاوه بر اون اون دو فایل رو هم کنارش بذارید. اون فایل ها رو از محلی که LibUsbDotNet رو نصب کردید در داخل پوشه Program Files\LibUsbDotNet\libusb-win32\x86 پیدا می کنید و در نهایت اینطوری میشه :



      حالا یه پروژه توی visual studio بسازید و در مسیر \bin\Debug این سه تا فایل رو که دیدید کپی کنید. بعدش به قسمت add refrence برید و libusbdotnet رو اضافه کنید.


      حالا ببینیم این فایل چی داره :


      خوب خیلی چیزا داره اما فعلا برای یه انتقال کنترلی همین رو می خوایم.
      اولین قدم برای ارتباط با دستگاه مورد نظر اینه که اون رو پیدا کنیم و به اصطلاح openش کنیم. (مثل COM port.) بعد هم باید یادتون باشه حتما در آخر Close کنید. چون ممکنه ایراداتی پیدا بشه . برای پیدا کردن دستگاه بهترین مشخصه vendor id و device id هستش. من vendor id = 0xeca0 و device id = 0xfada رو در نظر گیرفتم. پس از پیدا کردن و باز کردن دستگاه به وسیله تابع IOControlMessage می تونید که با دستگاه انتقال کنترلی انجام بدید اما قبلش یه نکاتی رو باید بگم.

      1. مگه نگفتم یه دستگاه ممکنه چند تا Configurtion داشته باشه، پس باید اول شماره Configurtion مورد نظر رو انتخاب کنیم که در اینجا چو فقط یه Configurtionداریم 0 هستش. برای انتخاب Configuration مورد نظر باید از تابع SetConfiguration استفاده کنید.
      2. مگه نگفتیم یه Configurtion ممکنه چند تا interface داشته باشه پس بعدش باید interface مورد نظر رو هم انتخاب کنید ، که در اینجا 0 هستش. برای انتخاب interface مورد نظر باید از تابع ClaimInterface استفاده کنید.
      3. در مورد بند 1 و 2 باید بگم که زمانی این کار معنی داره که شما خواسته های مربوط به configuration و interface رو در تابع usbFunctionSetup پشتیبانی کنید، و چون ما پشتیبانی نمی کنیم خوب معنی نداره که تو برنامه کامپیوتر این خواسته ها رو ارسال کنیم.

      ساخت درایور inf :
      بعد از نصب libusbdotnet به start\prorams\libusbdotnet بروید و برنامه inf creation wizard رو اجرا کنید و مطابق شکل ها برید تا inf رو خودش می سازه. نکته اینکه قبل این کارا باید دستگاه مورد نظر که همون دماسنج در حال طراحی هستش رو به کامپیوتر وصل کنید.




      بعد از save فایل inf در یک پوشه سه فایل libusbdotnet.dll و libusb0.dll , libusb0.sys رو که گفتم تو همون پوشه کپی کنید. حالا دستگاه رو به ویندز بشناسونید.





      خوب من دیگه وقت ندارم. این فایل پروژه رو بگیرید و تحلیلش کنید :

      http://mostafa.hk.googlepages.com/Thermo.zip
      بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
      اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

      دیدگاه


        #18
        پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

        بسیار عالی .ادامه بدین
        علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

        دیدگاه


          #19
          پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

          نوشته اصلی توسط omega_adiban
          بسیار عالی .ادامه بدین
          من شاید دیگه نرسم. از بچه ها هم که یک نفر نیست مرا یاری کند. دیگه هر کی این کاره باشه با این اطلاعاتی که گذاشتم تا آخرش میره، اگه سوالی دارید بپرسید. در ضمن کتاب اکسلسون رو هم پیشنهاد می کنم ولی موقع خوندنش حواستون به دو چیز باشه : 1. ترجمه افتضاحش اعصابتون رو خرد نکنه 2. خیلی وارد جزئیات شده و خودش هم تو مطلب گم شده، سعی کنید شما هم گم نشید. مفید ترین فصلاش هم : 3 و4و5و6 هستند و بقیه اش رو نخونید که گیج می شید. تازه همین فصل ها رو هم باید دو سه بار خوند.

          فصل آخر هم یه کم ویرایش کردم و برنامه pc هم کمی اصلاح شد.
          بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
          اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

          دیدگاه


            #20
            پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

            سلام
            آقا دستت درد نکنه.
            الان فکر کنم نوبت نوشتن cdc است.

            دیدگاه


              #21
              پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

              نوشته اصلی توسط Ali_Asadzadeh
              سلام
              آقا دستت درد نکنه.
              الان فکر کنم نوبت نوشتن cdc است.
              خوب CDC و ... پیچیدگی ندارن، فقط باید بسته بندی اطلاعات رو بدوونید و یا به عبارتی پروتکل دستگاهای CDC رو بدونید. من با Osuma تماس گرفتم و اون منبع این پروتکل رو برای مطالعه معرفی کرد :


              کد:
              hi tamura
              i need to add CTS , RTS and ... pins to your cdc project. but i have 2 questions :
              1. how can i found cdc protocol complete.
              2. what is "modeBuffer" array in your programm ? you never used it beneficial. 
              
              excuse me for my poor english
              thanks much
              mostafa , iran
              
              ****************
              Hello mostafa,
              
              Thank you for your interest in AVR-CDC.
              
              1. how can i found cdc protocol complete.
              
              http://www.usb.org/developers/devclass_docs
              Class definitions for Communication Devices 1.2 (.zip file format, size 2.61
              MB)
              
              Refer to PSTN120.pdf
              6.3.12
              
              2. what is "modeBuffer" array in your programm ? you never used it
              beneficial.
              
              USB-IO just echo-backs SetLineCoding data to GetLineCoding request.
              See AVR-CDC's code. AVR-CDC uses it to set baudrate, parity, etc.
              
              Regards,
              Osamu Tamura

              بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
              اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

              دیدگاه


                #22
                پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

                مرسی

                فقط نمیدونم چرا با این همه توضیح من گیجم هنوووووووووووووز oo: oo:
                علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

                دیدگاه


                  #23
                  پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

                  سلام
                  از اطلاعاتی که دادین منونم شما با c کار میکنید با bascom کسی میتونه همین کار رو بکنه

                  دیدگاه


                    #24
                    پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

                    سلام
                    آقا مصطفی میشه راجع به برنامه کامپیوتر یک کم بیشتر توضیح بدین.
                    همچنین در مورد استفاده از endpoint های دیگه هم ممنون میشیم. :job:

                    دیدگاه


                      #25
                      پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

                      نوشته اصلی توسط Ali_Asadzadeh
                      سلام
                      آقا مصطفی میشه راجع به برنامه کامپیوتر یک کم بیشتر توضیح بدین.
                      همچنین در مورد استفاده از endpoint های دیگه هم ممنون میشیم. :job:
                      کجاش رو مشکل دارید؟ سورس راحتی داره. اگه سیستم نقل و انتقال ها در USB رو کمی بلد باشید راحت سر در میارید.
                      بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                      اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                      دیدگاه


                        #26
                        پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

                        علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

                        دیدگاه


                          #27
                          پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

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

                          دیدگاه


                            #28
                            پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

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

                            دیدگاه


                              #29
                              پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

                              نوشته اصلی توسط Ali_Asadzadeh
                              سلام
                              آقا مصطفی میشه در آموزش بعدی راجع به یک پروژه صحبت کنید که بیشترین سرعت انتقال داده بین کامپیوتر و میکرو رو داشته باشه و از هر دوطرف پر سرعت باشه.
                              خوب حد اکثر سرعت تو obdev با انتقال کنترلی میسره. حدود 2k بایت در ثانیه. سرعت read وwrite هم مساویه.
                              این سرعت در read و write همزمان تقسیم میشه. مثلا 1500 و 500
                              خودتون یه پروژه پیشنهاد بدید
                              بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                              اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                              دیدگاه


                                #30
                                پاسخ : obdev USB ** آموزش اتصال avr به پورت usb بدون آی سی واسط

                                سلام
                                اقا یه سوال بی سرو ته

                                توی config برای winavr یه define هست که توضیح داده فلان عدد رو بذار برای کلاس hid من این کار رو کردم با VB هم براش بنامه نوشتم عالی کار کرد
                                ولی شنیدم با اون یه عدد libusb در کلاس hid کار نمیکنه

                                بگم وقتی اینکار رو کردم یه human interface device به یه system اضافه شد درایور هم نخواست
                                من سره کارم oo:
                                سر کارم گذاشتن oo:
                                اونا سره کارن oo:

                                موضوعه hid چه جوریه
                                به وبلاگم سر بزنید

                                دیدگاه

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