اطلاعیه

Collapse
No announcement yet.

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

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

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

    درایور 64 بیتی libusb رو سرچ کن و دانلود کن
    http://ceworld.ir/images/ads/dornablogcom_ads.gif

    دیدگاه


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

      فرض کنید میآ‌خواهیم از طریق V-USB طی یک انتقال کنترلی، از میکرو به کامپیوتر اطلاعات ارسال کنیم. آیا همیشه باید کامپیوتر از طریق تابع IOControlMessage درخواست اطلاعات کند و یا اینکه میکرو هم میآ‌تواند هر زمان که آماده بود اطلاعات به کامپیوتر بفرستد؟

      دیدگاه


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

        نوشته اصلی توسط ata
        فرض کنید میآ‌خواهیم از طریق V-USB طی یک انتقال کنترلی، از میکرو به کامپیوتر اطلاعات ارسال کنیم. آیا همیشه باید کامپیوتر از طریق تابع IOControlMessage درخواست اطلاعات کند و یا اینکه میکرو هم میآ‌تواند هر زمان که آماده بود اطلاعات به کامپیوتر بفرستد؟
        کامپیوتر باید درخواست بده.

        حالتی که شما گفتید وقفه ای میشه
        http://ceworld.ir/images/ads/dornablogcom_ads.gif

        دیدگاه


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

          یعنی باید کامپیوتر مدام درخواست بده؟ شاید میکرو هر چند ثانیه یک دیتا به کامپیوتر ارسال کنه!
          مثلا همین مبدل UART به TTL که به CDC معروفه به روش وقفه ای اطلاعات منتقل میکنه؟ چون هر لحظه امکان داره یه اطلاعاتی از میکرو به سمت کامپیوتر ارسال بشه!

          دیدگاه


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

            بله در این حالت شما باید وقفه ای کار کنید. بصورت کنترلی باید مدام از کامپیوتر polling بشه
            http://ceworld.ir/images/ads/dornablogcom_ads.gif

            دیدگاه


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

              یه جستجویی که کردم اکثرا روش انتقال کنترلی رو توضیح دادن و در مورد وقفهآ‌ای یه شرح مختصری دادن. شما در زمینهآ‌ی انتقال وقفهآ‌ای منبعی سراغ دارید؟

              دیدگاه


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


                http://sinaeng.com/USB%20PORT.html

                دیدگاه


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

                  سلام به تمامی اساتید
                  ببخشید این نوشته ها را مینویسم شاید به بعضی ها بر بخورد. ببخشید
                  18 صفحه مطالب گوناگونی گفته شد ولی بجزء چند صفحه اول آموزش بود بقیه 70% مطالب سئوال بود که 20% آن جواب داده شده نمیدانم چند درصد از دوستان توانسته اند با USB بخوبی کار کنند .
                  تایپ خوبی است ولی بعد از 2 سال با مشکلاتی دارد که برای رفع آن خواهشمندم استاتید آن را رفع کنند
                  پیشنهاد اول این است که با یه مثال ساده شروع کنند البته نه یه صورت حرفه ای توضیح دهند از ایجاد فایل ها و نحوه کامپایل آن و ... تا رسیدن به آخر هدف
                  مثلا:
                  1- خواندن 2 کلید از طریق USB و روشن کردن 2 عدد LED روی پورت USB
                  2- کنترل نشانگر ماوس روی کامپیوتر با چهار کلید ( چند تا تایپ ساختم :angry: ولی کسی جواب ساده و روان نداد :cry2
                  3- ....


                  n- مدارات پیچیده
                  چرا میگم ساده بگید چون خیلی ها با winavr و یا AVR Studio کار نکرده اند :redface: :biggrin:
                  متشکرم ببخشید :redface:
                  کمتر سخن گویم
                  بیشتر عمل کنیم

                  دیدگاه


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

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

                    با سلام خدمت دوستان
                    بابت مطالبی که در مورد usb در این تاپیک قرار دادین ممنون

                    ولی چرا در یک قسمتی که نقل قول کردم مطلب سر کاری قرار میدین
                    من چند ساعت وقت گذاشتم تا فایلی که در اینجا قرار دادین رو با حالت معمولی usbdrv مقایسه کنم ببینیم چه فرقی داره بعد تموم شدن فهمیدم که هیچ فرقی نمیکنه. اصلا این عبارت INTERRUPT_OUT_ENDPOINT پیدا نشد.

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

                    در ضمن فکر نکنین مفت خور هستم. میتونین برین سایت iranmicro ببینین با همین اسم یوزر چقد مطلب و تاپیک فرستادم. ولی مطالب درست نه سرکاری
                    برای اثبات اینو قرار میدم
                    کد:
                    how to use interrupt out transfer in vusb
                    how to use interrupt out transfer in vusb
                     by dagakshay » Wed Feb 16, 2011 7:56 am 
                    I HAD UNDERSTOOD THE INTERRUPT IN TRANSFER IN VUSB... PLEASE TELL ME HOW TO USE HOW TO USE INTERRUPT OUT TRANSFER IN VUSB... ANY EXAMPLE OR LINK FOR THAT... HOW TO DECLARE INTERRUPT OUT ENDPOINT
                    I HAD WENT THROUGH THE LINK:
                    http://vusb.wikidot.com/driver-api
                    
                    BUT HERE THEY HAD NOT SHOWN HOW TO DECLARE INTERRUPT OUT ENDPOINT....
                    Re: how to use interrupt out transfer in vusb
                     by Augend » Sat Feb 26, 2011 10:13 am 
                    first you need to declare in usb configuration . follow these steps:
                    1- go to usbdrv.c 
                    2- find this line: PROGMEM char usbDescriptorConfiguration[] = { /* USB configuration descriptor */
                    
                    3- add seven bites to the length of descriptor as followed in this line:
                    18 + 7 * USB_CFG_HAVE_INTRIN_ENDPOINT + (USB_CFG_DESCR_PROPS_HID & 0xff) +7, 0, //I added las +7
                    
                    4-now you need to add one ondpoint . find this line and add 1:
                    USB_CFG_HAVE_INTRIN_ENDPOINT + 1 , /* endpoints excl 0: number of endpoint descriptors to follow */ // I added last +1
                    
                    5-now at the end of descriptor add these codes to make a new OUT endpoint:
                    7, /* sizeof(usbDescrEndpoint) */
                    USBDESCR_ENDPOINT, /* descriptor type = endpoint */
                    (char)0x01, /* OUT endpoint number 1 */ //instead of 81
                    0x03, /* attrib: Interrupt endpoint */
                    8, 0, /* maximum packet size */
                    USB_CFG_INTR_POLL_INTERVAL, /* in ms */
                    
                    You need also to configure your driver to use this interrupt-OUT no-1 
                    
                    6- now go to usbconfig.h and set USB_CFG_IMPLEMENT_FN_WRITEOUT to 1
                    
                    7- find this line:
                    #if USB_CFG_IMPLEMENT_FN_WRITEOUT
                    if(usbRxToken < 0x10){ /* endpoint number in usbRxToken */
                    and change it to this:
                    if(usbRxToken == USBPID_OUT){ /* endpoint number in usbRxToken *///*
                    8-every time device receives Interrupt-out, goes into usbFunctionWriteOut()
                    tell me if it works for you
                    سلام
                    ببخشید این قدر دیر جواب دادم خیلی وقت بود به این تاپیک سر نزده بودم. حق با شماست. متاسفانه فایل ها مشکل داشتند و قصد سر کار گذاشتن نداشتم. فایل ها ابتدا بر روی سرور دیگری بود که کل سرور همراه فایل ها پاک شدند در سرور دوم که اپلود کردم فایل های اشنباهی قرار داده شد. لینک اصلاح شد.

                    http://electrotips.blog.ir

                    دیدگاه


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

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

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



                      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();
                      	}
                      }
                      باتشکر از مطالب مفید که قرار دادید
                      امکانش در مورد سورس هایی که قرار دادید یه مقدار بیشتر توضیح بدید والا از لحاظ برنامه نویسی در وضعیت فقر نسبی به سر می برم
                      مثلا در مورد این سه خط

                      usbRequest_t *req;
                      req = (usbRequest_t*)data;
                      if(req->bmRequestType == 0xac)
                      تو خط اول یه اشاره گر تعریف کردید .دو خط بعدی دیگه نمی فهمم
                      یا مثلا موقع returnکردن چرا یه عددو بر می گردونید و آرایه برمی نمی گردونید؟

                      دیدگاه


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

                        نوشته اصلی توسط mpc
                        سلام به تمامی اساتید
                        ببخشید این نوشته ها را مینویسم شاید به بعضی ها بر بخورد. ببخشید
                        18 صفحه مطالب گوناگونی گفته شد ولی بجزء چند صفحه اول آموزش بود بقیه 70% مطالب سئوال بود که 20% آن جواب داده شده نمیدانم چند درصد از دوستان توانسته اند با USB بخوبی کار کنند .
                        تایپ خوبی است ولی بعد از 2 سال با مشکلاتی دارد که برای رفع آن خواهشمندم استاتید آن را رفع کنند
                        پیشنهاد اول این است که با یه مثال ساده شروع کنند البته نه یه صورت حرفه ای توضیح دهند از ایجاد فایل ها و نحوه کامپایل آن و ... تا رسیدن به آخر هدف
                        مثلا:
                        1- خواندن 2 کلید از طریق USB و روشن کردن 2 عدد LED روی پورت USB
                        2- کنترل نشانگر ماوس روی کامپیوتر با چهار کلید ( چند تا تایپ ساختم :angry: ولی کسی جواب ساده و روان نداد :cry2
                        3- ....


                        n- مدارات پیچیده
                        چرا میگم ساده بگید چون خیلی ها با winavr و یا AVR Studio کار نکرده اند :redface: :biggrin:
                        متشکرم ببخشید :redface:
                        سلام چقدر جواب! :eek:
                        کمتر سخن گویم
                        بیشتر عمل کنیم

                        دیدگاه


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

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

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

                          دیدگاه


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

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

                            با تشکر
                            جناب استادسلام
                            دمت گرم :cry2: :cry2: :cry2:
                            اینه رسمه استاد و شاگردی؟ :cry2: :cry2:

                            دیدگاه


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

                              آقا مصطفی سلام
                              به چشم،چشمم کور میرم برنامه نویسی رو یاد می گیرم.
                              الان یه سوال مرتبط با درایور دارم
                              سوال:
                              یکی از روشهایی که برای پاسخ به داده ی ارسالی از کامپیوتر (که با استفاده از تابع usbFunctionSetup عملیات تجزیه و تحلیل روش صورت می گیره) مطرح کردید (بسته به اینکه چه حالتی داشته باشه)استفاده از مقدار تعیین شده ی USB_NO_MSG بود. حالا اگه ما هم در پاسخ و هم دریافت-پاسخ می تونیم این مقدارو برگردونیم؛درایوراز کجا میفهمه که باید الان تابع usbfunctionRead باید صدا بزنه یا usbfunctionWrite؟

                              دیدگاه


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

                                نوشته اصلی توسط kiyan90
                                آقا مصطفی سلام
                                به چشم،چشمم کور میرم برنامه نویسی رو یاد می گیرم.
                                الان یه سوال مرتبط با درایور دارم
                                سوال:
                                یکی از روشهایی که برای پاسخ به داده ی ارسالی از کامپیوتر (که با استفاده از تابع usbFunctionSetup عملیات تجزیه و تحلیل روش صورت می گیره) مطرح کردید (بسته به اینکه چه حالتی داشته باشه)استفاده از مقدار تعیین شده ی USB_NO_MSG بود. حالا اگه ما هم در پاسخ و هم دریافت-پاسخ می تونیم این مقدارو برگردونیم؛درایوراز کجا میفهمه که باید الان تابع usbfunctionRead باید صدا بزنه یا usbfunctionWrite؟
                                سلام اخوی
                                شما که خودت استادی
                                خوب معلومه که درایور از کجا میفهمه از بیت 7 بایت صفرم request :
                                http://s3.picofile.com/file/7507543545/req.png
                                بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                                اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                                دیدگاه

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