اطلاعیه

Collapse
No announcement yet.

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

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

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

    نوشته اصلی توسط alitaroosheh
    سلام
    اقا یه سوال بی سرو ته

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

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

    موضوعه hid چه جوریه
    HID یه پروتکل یا همون کلاس کار دستگاه USB هستش که برای دستگاههایی مثل دسته بازی و موس و کیبورد و ... در نظر گرفته شده. HID ها نیاز به نرخ بالای تبادل داده ندارن و به همین دلیل برنامه نویسهای obdev یه سری امکانات برای راحت شدن تعریف میکرو به عنوان یه HID در نظر گرفتن. اینکه با VB کار میکنه بستگی به درایور USB داره که شما تو VB ازش استفاده کردید. البته زمانی که شما HID رو کامل تعریف کنی ( مثلا یه موس) ویندوز کنترل اون دستگاه رو در دست میگیره و دیگه VB و #C و ++C و ... هیچ برنامه ای زورش به ویندوز نمیرسه که بخواد خصوصی با این دستگاه تبادل اطلاعات کنه.

    اینم یه موس HID
    http://instruct1.cit.cornell.edu/cou...ym82/index.htm
    البته من خودم کامل از HID سر در نمیارم.
    اینم یه دسته بازی HID
    http://avrusb.wikidot.com/project:ps2usb


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

    دیدگاه


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

      http://www.usb.org/developers/hidpage/
      بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
      اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

      دیدگاه


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

        سلام
        آقا یک مثال ساده بزنین که مثلآ با با لاترین سرعت ازeeprom بخواند و بنویسد.
        بر نامه کامپیوتر هم یک آرایه ساده داشته باشد که پر و خالی شود. :nice:

        دیدگاه


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

          نوشته اصلی توسط Ali_Asadzadeh
          سلام
          آقا یک مثال ساده بزنین که مثلآ با با لاترین سرعت ازeeprom بخواند و بنویسد.
          بر نامه کامپیوتر هم یک آرایه ساده داشته باشد که پر و خالی شود. :nice:
          comming soon. in next week
          بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
          اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

          دیدگاه


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

            اضافه کردن سیستم سریال پورت به پروگرامر USP-ASP

            بالاخره کنکور رو دادیم و بعد از 3.5 ساعت پس از کنکور این قابلیت رو به پروگرامر USB-ASP اضافه کردم. البته این توی سخت افزار پیش بینی شده، اما تو نرم افزار پشتیبانی نمیشد. من نرم افزارش رو تکمیل کردم. البته این سریال پورتش رو ویندوز نمیشناسه و فقط نرم افزاری که خودم نوشتم می تونه باهاش ارتباط برقرار کنه.
            این ورژن Beta 0.000001 این نرم افزاره
            http://mostafahk.blogspot.com/2008/12/usb-asp.html
            بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
            اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

            دیدگاه


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

              دوست عزیز سلام
              من داشتم برای پروژه پایانی این کارها رو به موازات شما انجام میدادم
              و با دیدن مطالب شما به این جمع و جوری خیلی خوشحال شدم
              من میدونم که جمع آوری این اطلاعات به صورت کاملا پراکنده چقدر سخته
              واقعا به شما خسته نباشید میگم :nice:

              در مورد نوشتن برنامه تو محیط دلفی یه پروژه دیدم که راستش نمیدونم از کجا دانلودش کردم :redface:
              توی این پروژه اومدن فایل lib رو به صورت یک dll در آوردن و صورت توابع و ساختار ها رو هم در فایل
              LibUSB.pas گذاشتن که توی دلفی هم میشه با libusb کار کرد.
              من تو این سایت جایی برای پلود ندیدم اگه خواستید ایمیل بزارید بفرستمش.

              امید وارم که مطالبتون ادامه داشته باشه

              دیدگاه


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

                نوشته اصلی توسط dehghanimeh
                دوست عزیز سلام
                من داشتم برای پروژه پایانی این کارها رو به موازات شما انجام میدادم
                و با دیدن مطالب شما به این جمع و جوری خیلی خوشحال شدم
                من میدونم که جمع آوری این اطلاعات به صورت کاملا پراکنده چقدر سخته
                واقعا به شما خسته نباشید میگم :nice:

                در مورد نوشتن برنامه تو محیط دلفی یه پروژه دیدم که راستش نمیدونم از کجا دانلودش کردم :redface:
                توی این پروژه اومدن فایل lib رو به صورت یک dll در آوردن و صورت توابع و ساختار ها رو هم در فایل
                LibUSB.pas گذاشتن که توی دلفی هم میشه با libusb کار کرد.
                من تو این سایت جایی برای پلود ندیدم اگه خواستید ایمیل بزارید بفرستمش.

                امید وارم که مطالبتون ادامه داشته باشه
                ایمیلم توی مشخصات کاربریم بود. mos_hei@yahoo.com
                اگه بقیه دوستان به ربانهایی مثل VB و ... توابع کار با libusb0.dll رو دارن همینجا بذارن تا بقیه هم استفاده کنند.
                بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                دیدگاه


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

                  آتیش زدم به مالم :mrgreen:

                  آقا این پروژه رو چند تا از دوستامون ازش پول در می اوردن من چون خودم هم روش کار کردم و حق آب و گل دارم گذاشتم اینجا لذت ببرید :mrgreen:

                  libusb with vb6:

                  http://electrorc.blogfa.com/post-18.aspx
                  به وبلاگم سر بزنید

                  دیدگاه


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

                    نوشته اصلی توسط dehghanimeh
                    ...
                    در مورد نوشتن برنامه تو محیط دلفی یه پروژه دیدم که راستش نمیدونم از کجا دانلودش کردم :redface:
                    توی این پروژه اومدن فایل lib رو به صورت یک dll در آوردن و صورت توابع و ساختار ها رو هم در فایل
                    LibUSB.pas گذاشتن که توی دلفی هم میشه با libusb کار کرد.
                    من تو این سایت جایی برای پلود ندیدم اگه خواستید ایمیل بزارید بفرستمش.

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

                    دیدگاه


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

                      نوشته اصلی توسط mostafahk
                      اضافه کردن سیستم سریال پورت به پروگرامر USP-ASP

                      بالاخره کنکور رو دادیم و بعد از 3.5 ساعت پس از کنکور این قابلیت رو به پروگرامر USB-ASP اضافه کردم. البته این توی سخت افزار پیش بینی شده، اما تو نرم افزار پشتیبانی نمیشد. من نرم افزارش رو تکمیل کردم. البته این سریال پورتش رو ویندوز نمیشناسه و فقط نرم افزاری که خودم نوشتم می تونه باهاش ارتباط برقرار کنه.
                      این ورژن Beta 0.000001 این نرم افزاره
                      http://mostafahk.blogspot.com/2008/12/usb-asp.html

                      سلام
                      من برای usb سورسهای زیادی رو دیدم ولی همشون سورس میکرو را گذاشته بودن واسه دانلود!
                      اصل کار با usb هم همین برنامه کامپیوتریش هست! میشه لطف کنید سورس این برنامه کامپیوتری رو در اختیار من بزارین؟؟؟؟ واقعا بهش نیاز دارم.
                      خیلی کارم گیره!!!!
                      خواهشا کمک کنین... تمام مشکل من در برنامه کامپیوتریش هست. من هم با دات نت و با usblibdotnet.dll کار میکنم ولی پاک گیجم کرده!!!!!!
                      خواهشا سورس برنامه را در اختیار من قرار دهید...
                      http://ceworld.ir/images/ads/dornablogcom_ads.gif

                      دیدگاه


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

                        نوشته اصلی توسط behnam_kh2002



                        سلام
                        من برای usb سورسهای زیادی رو دیدم ولی همشون سورس میکرو را گذاشته بودن واسه دانلود!
                        اصل کار با usb هم همین برنامه کامپیوتریش هست! میشه لطف کنید سورس این برنامه کامپیوتری رو در اختیار من بزارین؟؟؟؟ واقعا بهش نیاز دارم.
                        خیلی کارم گیره!!!!
                        خواهشا کمک کنین... تمام مشکل من در برنامه کامپیوتریش هست. من هم با دات نت و با usblibdotnet.dll کار میکنم ولی پاک گیجم کرده!!!!!!
                        خواهشا سورس برنامه را در اختیار من قرار دهید...
                        تو صفحه دوم همین تاپیک یه پروژه دماسنج با C# رو توضیح دادم. متاسفانه تمام عکسهای تاپیکم پریده و picture host تعطیل شده و اگه کسی این صفحات رو save کرده بیاد و عکسها رو به من mail کنه.
                        mostafa.hk@gmail.com
                        http://mostafa.hk.googlepages.com/Thermo.zip
                        بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                        اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                        دیدگاه


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

                          نوشته اصلی توسط mostafahk





                          سلام
                          من برای usb سورسهای زیادی رو دیدم ولی همشون سورس میکرو را گذاشته بودن واسه دانلود!
                          اصل کار با usb هم همین برنامه کامپیوتریش هست! میشه لطف کنید سورس این برنامه کامپیوتری رو در اختیار من بزارین؟؟؟؟ واقعا بهش نیاز دارم.
                          خیلی کارم گیره!!!!
                          خواهشا کمک کنین... تمام مشکل من در برنامه کامپیوتریش هست. من هم با دات نت و با usblibdotnet.dll کار میکنم ولی پاک گیجم کرده!!!!!!
                          خواهشا سورس برنامه را در اختیار من قرار دهید...
                          تو صفحه دوم همین تاپیک یه پروژه دماسنج با C# رو توضیح دادم. متاسفانه تمام عکسهای تاپیکم پریده و picture host تعطیل شده و اگه کسی این صفحات رو save کرده بیاد و عکسها رو به من mail کنه.
                          mostafa.hk@gmail.com
                          http://mostafa.hk.googlepages.com/Thermo.zip
                          [/quote]

                          سلام.
                          مرسی از اینکه جواب منو دادین...
                          من پروژه دماسنج رو دیده بدم. اینجا فقط یه درخواست مثل 0xaa میفرسته که میکرو دما رو برمیگردونه... ولی من میخواستم هم 8 بایت رو بفرستم به میکرو و هم اینکه به وسیله توابع functionRead و functionWrite در میکرو بیش از 8 بایت رو انتقال بدم.
                          برنامه سی شارپ دماسنج فقط یه بایت درخواست میفرسته! میشه لطف کنی یه سورس به من بدی که هم 8 بایت رو به میکرو بفرسته و هم بیش از 8 بایت رو؟؟؟؟؟؟ واقعا بهش نیاز دارم... باور کن خیلی وقته دارم روش کار میکنم :cry: :cry: :cry: :cry:
                          خواهشا این سورس رو در اختیار من بزار...
                          ممنونم
                          http://ceworld.ir/images/ads/dornablogcom_ads.gif

                          دیدگاه


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

                            تاپیک های نامربوط به بحث پاک شدند.
                            لطفا با رعایت قوانین سایت و حفظ احترام به کاربران باعث منحرف شدن بحث تاپیک نشید.
                            قطعا هر یک از دوستان هروقت که بتونند به شما کمک خواهند کرد پس پا فشاری بر گرفتن جواب سریعتر منطقی نیست.

                            با تشکر از رعایت موارد فوق.

                            دیدگاه


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


                              آشنایی با توابع usbFunctionWrite و usbFunctionRead


                              خوب گفتیم برای انتقال اطلاعات از دستگاه USB به کامپیوتر Obdev دو راه را پیش روی ما گذاشته است :
                              1 . در مرحله Setup از انتقال کنترلی ، که در این مرحله تابع usbFunctionSetup فراخوانی می شود، می توانید اشاره گر usbMsgPtr را که در فایل usbdrv.h تعریف شده روی آرایه ای که قصد دارید اطلاعات آن به کامپیوتر ارسال شود ست کنید و اندازه این آرایه را return کنید :


                              کد:
                              #include <AVR/io.h>
                              #include "usbdrv.h"
                              
                              uchar res[6];
                              
                              uchar usbFunctionSetup(uchar data[8]) {
                              
                              	usbRequest_t *req;
                              	req = (usbRequest_t*)data;
                              	if(req->bmRequestType == 0xac)
                              	{
                              		res[0] = PINB;
                              		res[1] = PINC;
                              		res[2] = PIND;
                              		return 3;
                              	}
                              
                              	return 0;
                              }
                              
                              
                              int main()
                              {
                              }

                              2. استفاده از تابع usbFunctionRead :
                              استقاده از این تابع بیشتر برای جمع و جور شدن برنامه است. این تابع دو آرگومان دارد ، اولی uchar *data که آرایه ای است که باید اطلاعاتی که قرار است به کامپیوتر فرستاده شود را باید در آن بریزیم و دومی uchar len است که تعداد بایتهایی که کامپیوتر درخواست داده را نشان می دهد( همان طور که گفته شد، حجم انتفال داده در مرحله تبادل داده در انتقال کنترلی در مرحله قبل آن یعنی مرحله setup توسط بایت های 6 و 7 از هشت بایتی که در این مرحله ارستل می شود تعیین می شود، که اگر کمتر یا بیشتر بفرستیم در کامپیوتر erroe می دهد). در این حالت برنامه این گونه می شود :

                              کد:
                              #include <AVR/io.h>
                              #include "usbdrv.h"
                              
                              uchar usbFunctionSetup(uchar data[8]) {
                              
                              	usbRequest_t *req;
                              	req = (usbRequest_t*)data;
                              	if(req->bmRequestType == 0xac)
                              	{
                              		return USB_NO_MSG;
                              	}
                              
                              	return 0;
                              }
                              
                              uchar usbFunctionRead(uchar *data, uchar len)
                              {
                              	data[0] = PINB;
                              	data[1] = PINC;
                              	data[2] = PIND;
                              
                              	return 3;
                              }
                              
                              int main()
                              {
                              	usbInit();
                              	while(1)
                              	{
                              		usbPoll();
                              	}
                              }

                              اما اگر بخواهیم در مرحله تبادل داده اطلاعات را از کامپیوتر به دستگاه بفرستیم، obdev تنها یک راه برای دریافت اطلاعات در مرحله داده PC->Device دارد و آن هم ستفاه از usbFunctionWrite هست. این تابع نیز دو آرگومان دارد، اولی که uchar *data همان آرایه ای است که کامپیوتر برای مرحله داده فرستاده، دومی هم که len یعنی طول این آرایه است. حال برنامه نهایی این شکلی می شود :

                              کد:
                              #include <AVR/io.h>
                              #include "usbdrv.h"
                              
                              uchar usbFunctionSetup(uchar data[8]) {
                              
                              	usbRequest_t *req;
                              	req = (usbRequest_t*)data;
                              	if(req->bmRequestType == 0xac)//PC need PINC registers
                              	{
                              		return USB_NO_MSG;
                              	}
                              
                              	if(req->bmRequestType == 0xaf)//PC need to set PORTC and DDRC registers
                              	{
                              		return USB_NO_MSG;
                              	}
                              
                              	return 0;
                              }
                              
                              uchar usbFunctionRead(uchar *data, uchar len)
                              {
                              	data[0] = PINC;
                              
                              	return 1; //lemght of data stored in array
                              }
                              
                              uchar usbFunctionWrite(uchar *data, uchar len)
                              {
                              	PORTC = data[0];
                              	DDRC = data[1];
                              
                              	return 1; // ok
                              }
                              
                              int main()
                              {
                              	usbInit();
                              	while(1)
                              	{
                              		usbPoll();
                              	}
                              }

                              در این برنامه دو خواسته غیر استاندارد توسط من طراح تعریف شده که در مرحله بعدی برنامه PC را میتنی بر این دو خواسته می نویسیم :
                              اول 0xac که قرار است AVR مقدار PINC را برپرداند و دوم 0xaf که AVR قرار است مقدار DDRC و PORTC را تغییر دهد.
                              البته من این برنامه را به این شکل بهتر می دانم :

                              کد:
                              #include <AVR/io.h>
                              #include "usbdrv.h"
                              
                              uchar rep[4];
                              
                              uchar usbFunctionSetup(uchar data[8]) {
                              
                              	usbRequest_t *req;
                              	req = (usbRequest_t*)data;
                              	if(req->bmRequestType == 0xac)//PC need PINC registers
                              	{
                              		usbMsgPtr = rep;
                              		rep[0] = PINC;
                              		return 1;//total bytes stored in usbMsgPtr array
                              	}
                              
                              	if(req->bmRequestType == 0xaf)//PC need to set PORTC and DDRC registers
                              	{
                              		return USB_NO_MSG;
                              	}
                              
                              	return 0;
                              }
                              
                              
                              uchar usbFunctionWrite(uchar *data, uchar len)
                              {
                              	PORTC = data[0];
                              	DDRC = data[1];
                              
                              	return 1; // ok
                              }
                              
                              int main()
                              {
                              	usbInit();
                              	while(1)
                              	{
                              		usbPoll();
                              	}
                              }

                              و در نهایت باید بگم که از هر یک از این دو تابع بخواهید استاده کنید باید در فایل usbconfig.h مقدار USB_CFG_IMPLEMENT_FN_WRITE و یا USB_CFG_IMPLEMENT_FN_READ را 1 کنید :


                              کد:
                              #define USB_CFG_IMPLEMENT_FN_WRITE   1
                              /* Set this to 1 if you want usbFunctionWrite() to be called for control-out
                               * transfers. Set it to 0 if you don't need it and want to save a couple of
                               * bytes.
                               */
                              #define USB_CFG_IMPLEMENT_FN_READ    0
                              /* Set this to 1 if you need to send control replies which are generated
                               * "on the fly" when usbFunctionRead() is called. If you only want to send
                               * data from a static buffer, set it to 0 and return the data from
                               * usbFunctionSetup(). This saves a couple of bytes.
                              بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                              اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                              دیدگاه


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

                                سلام
                                مصطفی جان ممنون از کار خوبی که شروع کردی

                                منم یه برد تست برای اینکار درست کردم
                                برنامهٔ Host رو با libusb در لینوکس نوشتم
                                خیلی ساده و بیآ‌آلایش با gcc کامپایل کردم

                                برای اینکه بعدا یادم نره چکار کردم دارم این مقاله رو توی ویکی میآ‌نویسم !
                                فعلا تکمیل نشده ، دوستان اگر مایل بودن به دستی به این مقاله هم بکشن

                                موفق باشید :smile:
                                چگونه هوشمندانه بپرسیم

                                دیدگاه

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