اطلاعیه

Collapse
No announcement yet.

کار با پورت USB میکرو های سری AT90USB

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

    کار با پورت USB میکرو های سری AT90USB

    با سلام

    میخواستم با ابن پورت USB میکرو AT90USB162 کار کنم رفتم توی دیتا شیت یه چرخی زدم دیدم نه کار ما نیست بهتره برم دنبال یه کتابخونه ای چیزی یه سرچی کردم خوردم به این کتابخونه LUFA ، کار آقای Dean Camera هست این لینک سایتشون و صفحه ای که لینک آخرین ورژن این کتابخونه رو قرار میدن هست :
    http://www.fourwalledcubicle.com/LUFA.php

    کتابخونه رو دانلود کردم یه نگاه بهش کردم آخه این چیه ! سرش کجاس؟ تهش کجاس؟ اینکه یه مجموعه کتابخونه اس کدومش مال USB ایه؟ با خودم گفتم برم همون دیتا شیت رو بخونم بهتره !

    توی آموزش تحت وبگی که گزاشته بودن دیدم که میکرو های زیر رو از AVR 8 بیتی ساپورت میکنه :


    یکم دیگه که دقت کردم دیدم که بله عجب چیزه کاملیه برای ارتباط با همه دستگاه USB کتابخونه داره وقتم رو روی این بزارم خیلی بهتره اما چه فایده وقتی حتی هنوز نمیدونم کدومش مال ارتباط با کامپیوتر هست ! (ماشالله منم که اینگلیسی فول!)
    خوب من یک چیزایی در مورد پورت USB و نحوه عملکرداش میدونم با این خواسته های استاندارد و توصیفگرها هم تقریبا آشنا هستم

    چیزی که به نظرم اینجا لازمه به دوقسمت تقسیم میشه یکی نوشتن برنامه میکرو و دومی نوشتن یک برنامه ویژوال برای ارتباط با USB که برای دومی من توی مجله PMM6,7 مثالی رو دیدم که با وی بی و C# نوشته بودند که به نظرم همون نیازم رو برطرف کنه البته یه سوال از کسانی که با این کتابخونه کار کردن داخل این مجموعه، نرمافزاری برای این کار وجود نداره؟ (من چیزی ندیدم)
    پس اینجا چیزی که بیشتر نیاز به تامل ، تاخر و تعقل داره به نظر همین مجموعه LUFA هست .

    خلاصه از تمامی دوستانی که با این کتابخونه کار کردن درخواست دارم تا بنده رو کمک کنند اگه میشه بفرمایید اصلا از کجاش باید شروع کنم !
    __________________________________________________ __________________________________________________ _____

    فهرست مطالب:

    USB CDC Demonstration UART to USB Bridge

    USB Software Library for AT90USBxxx Microcontrollers

    کار با LUFA قسمت اول اجرای VirtualSerial

    بررسی مثال VirtualSerial

    چت بین USART و USB

    پروگرامر MKII

    ( AT90USBKEY_MRB ( AT90USB1287

    USBtoSerial

    تغذیه AT90USB

    USB WAV Player

    به همت جناب آقای سامان اسدی :

    اتصال کیبرد USB به میکرو AVR

    چگونه زمان تاخیر اسکن صفحه کلید را کنترل کنیم ؟؟ (خیلی مهم) AVR

    #2
    پاسخ : کتابخانه LUFA

    خوب من یه چیزایی فهمیدم
    آقا من فهمیدم که این کتاخونه اصلی یعنی هدر usb.h توی مسیر زیر هست که با ایکلود کردن اون بقیه کتابخونه های مورد نیاز اینکلود میشن

    ...\LUFA-111009_3\LUFA-111009\LUFA\Drivers\USB



    /** \file
    * \brief Master include file for the library USB functionality.
    *
    * Master include file for the library USB functionality.
    *
    * This file should be included in all user projects making use of the USB portions of the library, instead of
    * the individual USB driver submodule headers.
    */



    فعلا فقط همین ! (واقعا خسته نباشم )

    حالا باید چی کار کنم ؟ برای یه ارتباط ساده با usb باید چه تنظیماتی انجام بشه ؟

    ممنون از توجهتون

    دیدگاه


      #3
      پاسخ : کتابخانه LUFA

      آقا اصلا میشه یه چارت کلی برای ارتباط با USB تعریف کرد؟( در حالت کلی میگم فارق از هر کتابخونه ای)
      که مثلا بگیم این چارت شامل چهار قسمت اصلی میشه :

      1. انجام تنظیمات مربوطه به USB

      2. راه ندازی و شروع ارتباط

      3. ارسال داده

      4.دریافت داده


      ممنون از توجهتون

      دیدگاه


        #4
        پاسخ : کار با پورت USB میکرو های سری AT90USB

        آقا من تصمیم گرفتم برم همون دیتا شیت رو بخونم
        خوب اولین چیزی که تو این قسمت نوشته مثل بقیه قسمت ها خصوصیات این ماژول هست :

        Features
        • Support full-speed
        • Support ping-pong mode (dual bank), with transparent switch
        • 176 bytes of DPRAM
        – 1 endpoint of 64 bytes max, (default control endpoint)
        – 2 endpoints of 64 bytes max, (one bank)
        – 2 endpoints of 64 bytes max, (one or two banks)


        خوب همین جا برام چند تا سوال ایجاد شد :

        1. منظور از ping-pong mode (dual bank), with transparent switch چیه ؟

        2. منظور از one bank و two banks چیه ؟

        دیدگاه


          #5
          پاسخ : کار با پورت USB میکرو های سری AT90USB

          خوب مورد جدیدی که تازه فهمیدم اینه که ماژول usb میتونه در کلاس های مختلف استفاده بشه مثلا :

          1. ( Mass Storage Device ( MSD

          2. ( Human Interface Device ( HID

          3. ( Device Firmware Upgrade ( DFU

          4. ( Communication Device Class ( CDC

          5. Audio Class

          6. Printer Class

          7. RNDIS Class

          8. Still Image Class

          حالا کسی میدونه هر کلاس برای چه کاری مناسبه و اینکه اصلا مفهوم خود Class چیه ؟

          ممنون از توجهتون

          دیدگاه


            #6
            پاسخ : کار با پورت USB میکرو های سری AT90USB

            خوب من با یکسری تحقیقات میدانی که انجام دادم فهمیدم اون کلاسی که بدرد من میخوره برای شروع CDC هست چون حداقل فایده ای که داره اینه که نیازی به یک نرم افزار خاص برای ارتباط با USB نداره (درسته ؟) و میشه از همون هایپر ترمینال ویندوز هم استفاده کرد در واقع اینجا با ایجاد یک پورت کام مجازی یک پلی بین USB و UART ایجاد میشه و ارتباط با پورت کام برقرار میشه و حالا چیزی که این جا مطرحه اینه که برم AVR272 و AVR276 رو برای اینکار بخونم یا اینکه با کتابخون های LUFA کار کنم بهتره ؟

            و مورد بعدی اینکه سرعت برقرای ارتباط توی اینحالت برابر با سرعت UART میشه ؟

            ممنون از توجهتون

            دیدگاه


              #7
              پاسخ : کار با پورت USB میکرو های سری AT90USB

              من هنوز وقت نکردم با USB کار کنم. اما راجع به سرعتش. نمیدونم چی بگم. چون توی UART وقتی روی 9600 ارتباط میگیریم میدونیم بعد از 1.2 میلی ثانیه اطلاعات به طرف مقابل رسیده. اما از اونجایی که بنظر میاد USB یک کانال ارتباطی مشترک باشه حتی با سرعت 1 مگا بیت نمیدونم این زمانبندی قابل استناد هست یا نه؟
              تا جایی که میدونم مبدل های ارتباطی سریال به USB هم همیشه جوابگو نیستن. مخصوصا که دوستان روی کار با PLC های S7 معمولا به مشکل بر میخوردن. حالا این ممکنه به این سرعت و نحوه تبادل اطلاعات برگرده یا چیز دیگه ای هست....نمیدونم.

              دیدگاه


                #8
                پاسخ : کار با پورت USB میکرو های سری AT90USB

                خوب من بالاخره تونستم با استفاده از این مثال اتمل که داخل AVR-USB-162-CDCهست با پورت usb ارتباط برقرار کنم و یکسری رشته رو به هایپر ترمینال بفرستم ، در واقع این مثال برای بورد آموزشی stk525 و stk526 نوشته شده که تمام پیکره بندی های سخت افزارش در فایل stk_526.h که میتونیم مطابق اون سخت افزار رو تهیه و یا مطابق نظر خودمون اصلاحش کنیم البته این رو هم بگم سورس اس برای iar , avrgcc نوشته شده که من فعلا با نسخه iar دارم کار میکنم البته میشه با انجام یکسری تنظیمات در فایل compiler.h میشه از اون در کامپایلر های دیگه مثل کدویژن استفاده کرد.

                خوب اگر دوستان مایل هستید این تایپیک رو فعلا در وحله اول اختصاص بدیم به بررسی appnote های avr272 و avr276 که برای استفاده از کلاس cdc نوشته شدند .بعد از اتمام کار بریم سراغ lufa نظرتون چیه ؟

                ممنون از توجهتون

                دیدگاه


                  #9
                  پاسخ : کار با پورت USB میکرو های سری AT90USB

                  avr272
                  USB CDC Demonstration UART to USB Bridge

                  کلا هدف از ارائه این appnote از اونجا که توی pc های امروزی ویا مثلا لپ تاب ها دیگه پورت rs232 حذف شده و جای خودش رو به پورت usb داده و از طرفی اگر بخواهیم تجهیزاتی که با uart کار میکنند به usb منتقل کنیم هم در توسعه برنامه pc و هم توسعه دستگاه کار دشواری به نظر میاد توی اینجا اتمل امده یک راه حل ساده رو برای رفع این مسئله پیشنهاد کرده که از طریق کلاس cdc که یک توضیح مختصری در موردش در پست قبل گفتم ارائه کرده از ویژگی های این روش :
                  1. عدم نیاز به تغییر در برنامه pc
                  2. تغییرات اندک در برنامه دستگاه usb

                  سخت افزار مورد نیاز :
                  1. یک عدد از میکرو های سری usb (من خودم از هدر بورد سایت "TATLY AVR"استفاده میکنم)
                  2. کابل usb

                  در مورد پروگرامر ، به غیر پروگرامر های خود اتمل پروگرامری که این میکرو رو ساپروت میکنه یکیش AVR910 هست که من خودم از این استفاده میکنم و البته میتونید با پروگرامر کردن بوت لودر مربوط به میکروتون بدون نیاز به پروگرامر اون رو با نرم افزار FLIP پروگرام کنید روش کارش هم در انجمن TATLY AVR توضیح داده شده

                  خوب برای شروع کار مثال اتمل رو با IAR یا GCC باز کنید و برنامه رو کامپایل و فایل هگز رو داخل میکرو بریزید (اگر با FLIP کار میکنید کافیه که بر روی START APPLICATION کلیک کنید ) پس از شروع کار میکرو دستگاه USB توسط کامپیوتر شناخته میشه حالا باید درایور مربوطه رو نصب کنید برای این کار آدرس زیر رو به ویزارد نصب درایور بدید AVR-USB-162-CDC\Atmel\at90usb162-cdc-1_0_1\at90usb162\demo\cdc\...\...
                  پس از نصب درایور (انجام مراحل سرشماری ) دستگاه USB به عنوان یک پورت کام مجازی با نام AT90USBxxx CDC USB to UART MGM شناخته میشه به ترتیبی که در شکل زیر مشاهده میکنید

                  بعد روش کلیک راست کنید و به قسمت PROPERTIES برید و بعد در برگه PORT SETTINGS بود ریت رو برابر با 38400 انتخاب کنید( این بود ریتی هست که بصورت پیشفرض در فایل config.h انتخاب شده میتونید مقدارش رو عوض کنید) بعد تغییرات رو ذخیره کنید .
                  حالا هایپر ترمینال رو باز کنید (اگر ویندوزتون هایپر ترمینال نداره و از کدویژن و یا بسکام استفاده میکنید میتونید از ترمینال ایمولاتور اون ها هم استفاده کنید ) در ابتدا تنظیمات ترمینال رو مطابق با تنظیمات برگه PORT SETTINGS انجام بدیدو پروت کام متناظر رو انتخاب و باز کنید .
                  در این حالت با توجه به سخت افزار و فایل stk_526.h با صفر کردن به ترتیب PB0 ,PB4,PB5,PB6,PB7,PD7 در هایپر ترمینال موارد زیر رو مشاهده میکنید که به نمایش در می آیند :


                  پایان قسمت اول

                  دیدگاه


                    #10
                    پاسخ : کار با پورت USB میکرو های سری AT90USB

                    application overview :

                    در واقع اینجا CDC به کاربر این امکان رو میده تا پورت RS232 رو با پورت USB به عنوان سخت افزار شبیه سازی کنه بنابراین دستگاه در قالب یک پورت کام مجازی به جای دستگاه USB در دیوایس منیجر ویندوز ظاهر میشه و این مسئله این امکان رو به کار بر میده تا از برنامه نوشته شده برای پورت RS232 با استفاده از USB بدون تغییر در برنامه PC استفاده کند .
                    در شکل زیر ساختار کلی نحوه برقراری ارتباط بین یک مجموعه برنامه نوشته شده در دستگاه و برنامه PC از طریق دو پورت RS232 و USB نشان داده شده

                    همونطور که در شکل فوق مشاهده میشود در ارتباط USB درایور UART در قسمت دستگاه جای خودش رو به درایور UART-USB داده پس کاربر باید برای ارتباط با PC از توابع UART-USB به جای توابع UART استفاده نماید

                    در اینجا تنها یک بار دستگاه USB توسط PC طی مراحل شمارش شناسایی شده و بعد از ان برنامه CDC یک ارتباط دو طرفه (FULL DUPLEX) بین PC و دستگاه تامین میکنه

                    Firmware :
                    در شکل زیر نمایی از معماری USB CDC نشان داده شده :

                    خوب چیزی که من متوجه شدم در ابتدای کار تابع main اجرا میشه توی این تابع مطابق با اونچه که در فایل main.c نوشته شده :


                    کد:
                    int main(void)
                    {
                    
                     Usb_enable_regulator();
                    
                    #ifndef AVRGCC
                      Wdt_off();
                    #else
                      wdt_reset();
                      Wdt_clear_flag();
                      Wdt_change_enable();
                      Wdt_stop();
                    #endif
                      Clear_prescaler();
                      scheduler();
                      while(1){
                       
                      }
                      return 0;
                    }


                    در ابتدا از آنجا که معمولا پیکره بندی تغذیه میکرو به صورت زیر انجام میشه (اینجا حداقل با توجه به بورد stk525,526) برای تغذیه USB Pad ها به ولتاژ 3.3 ولت نیاز داریم باید از رگولاتور داخلی میکرو استفاده کنیم برای این منظور باید همواره بیت REGDIS از رجیستر REGCR صفر شود که این کار با استفاده از ماکرو Usb_enable_regulator() که بدون ورودی و خروجی میباشد انجام میگردد .

                    توجه : با یک کردن بیت REGDIS از رجیستر REGCR رگولاتور داخلی بای پس میشه و باید برای اجتناب از مصرف توان اضافی در صورت استفاده از پیکره بندی 3.3 ولت غیر فعال گردد برای اینکار میتوان از ماکروی Usb_disable_regulator ( ) استفاده کرد از طرفی بعد از ریست شدن برنامه این بیت صفر شده باید برنامه به گونه ای باشد که بتواند این بیت رو بعد از هرگونه ریست یک کند
                    برای چک کردن صفر بودن این بیت یا به عبارت بهتر فعال بودن رگولاتور داخلی می توان از ماکروی Is_usb_regulator_enabled ( ) استفاده نمود .

                    پس از فعال کردن رگولاتور داخلی پرسکالر داخلی فرکانس اوسیلاتور با استفاده از ماکروی Clear_prescaler ( ) ریست میشه و مقدار پرسکالر برابر با 1 میشود .

                    سپس با اجرای تابع scheduler() ابتدا تنظیمات مربوط به زمانبندی اجرای تمام task ها انجام شده و سپس اجرا می گردد .
                    -----------------------------------------------
                    خوب اونچه من متوجه شدم اینه که اینجا ما یک سیستم داریم که از یک مجموعه task تشکیل شده که با استفاده از زمانبند"scheduler" کل زمان اجرا application بین شون تقسیم میشه که فکر میکنم این همون مفهوم سیستم های embedded باشه .
                    _______________________________________
                    به این ترتیب بعد از انجام تنظیمات زمانبند و اجرای اون میکرو وارد فاز اجرایی اصلی میشه که در ابتدا با انجام شمارش پورت usb توسط pc شناسایی شده و سپس ادامه کار سیستم به ترتیبی که usb_task مطابق اونچه که من از عکس بالا متوجه میشم وظیفه انجام مراحل شمارش و cdc_task وظیفه انجام عملیات cdc رو برعهده داره .

                    CDC_task.c :
                    این فایل مطابق شکل زیر شامل یکسری توابع برای آماده سازی سخت افزار برای استفاده در برنامه و جمع آوری داده ها و ارسال اون ها میشه .

                    مطابق اونچه در این فایل آمده :


                    کد:
                    void cdc_task_init(void)
                    {
                      uart_init();
                      Leds_init();
                      Joy_init();
                      Hwb_button_init();
                      Usb_enable_sof_interrupt();
                    #ifdef AVRGCC
                     	fdevopen(uart_usb_putchar,uart_usb_getchar); //for printf redirection 
                    #endif
                    }
                    
                    
                    
                    //! @brief Entry point of the uart cdc management
                    //!
                    //! This function links the uart and the USB bus.
                    //!
                    //! @param none
                    //!
                    //! @return none
                    void cdc_task(void)
                    {
                      if(Is_device_enumerated()) //Enumeration processs OK ?
                      {
                       if(cpt_sof>=NB_MS_BEFORE_FLUSH && tx_counter!=0 ) //Flush buffer in Timeout
                       {
                      	  cpt_sof=0;
                    		  uart_usb_flush();
                       }
                       
                    	  if (uart_test_hit())  //Something on USART ?
                     	  {
                     		  uart_usb_putchar(uart_getchar());  // Loop back, USART to USB
                         Led0_toggle();
                     	  }
                      
                       if (Uart_tx_ready())  //USART free ?
                       {
                         if (uart_usb_test_hit())  // Something received from the USB ?
                    	   {
                    	 	   while (rx_counter)
                    		   {
                    			   uart_putchar(uart_usb_getchar());  // loop back USB to USART
                            Led3_toggle();
                    		   }
                    	   }
                       }
                    
                       if ( cpt_sof>=REPEAT_KEY_PRESSED)  //Debounce joystick events
                       {
                        
                        
                       
                         if (Is_joy_select())
                         printf ("Select Pressed !\r\n");
                    
                         if (Is_joy_right())
                         printf ("Right Pressed !\r\n");
                      
                         if (Is_joy_left())
                         printf ("Left Pressed !\r\n");
                    
                         if (Is_joy_down())
                         printf ("Down Pressed !\r\n");
                    
                         if (Is_joy_up())
                         printf ("Up Pressed !\r\n");
                    
                         if(Is_hwb())
                         printf("Hello from AT90USBXXX !\r\n");
                       }
                      }
                      
                    }



                    cdc_task_init : این تابع آماده سازی سخت افزار های جانبی که به دستگاه متصل شدند و همچنین مقدار دهی اولیه پارامتر های cdc رو برعهده داد .

                    cdc_task : این تابع وظیفه مدیریت ارسال داده رو از دو طریق پروت کام مجازی و uart to usb bridge برعهده داره


                    پایان قسمت دوم

                    دیدگاه


                      #11
                      پاسخ : کار با پورت USB میکرو های سری AT90USB

                      uart_usb_lib :

                      کاری که در این فایل انجام میشه کنترل توابع UART USB هست که شامل توابع زیر میشه :

                      1.(void uart_usb_init (void : این تابع با مقدار دهی متغیرهای مورد استفاده در کتابخانه uart_usb وظیفه آماده سازی رو برعهده دارد به ترتیبی که در کد زیر مشاهده میکنید :

                      کد:
                      00033 void uart_usb_init(void)
                      00034 {
                      00035  tx_counter = 0;
                      00036  rx_counter = 0;
                      00037 }

                      توجه : متغیر های tx_counter و rx_counter در تمام مکان ها از نوع unsigned char تعریف شده اند .

                      2.(bit uart_usb_test_hit (void : این تابع این مسئله را چک میکند که آیا اصلا اطلاعاتی بر روی باس usb دریافت شده یا خیر که اگر یک بایت داده آماده خواندن باشد خروجی تابع true خواهد بود .

                      3. (char uart_usb_getchar(void : این تابع یک بایت داده رو از روی usb bus میخونه به این ترتیب که اگر یک بایت داده داخل بافر usb fifo موجود باشه تابع ابن بایت رو برمی گردونه و اگر داخل بافر داده برای خوندن آماده نباشه با توجه به(while (!uart_usb_test_hit()منتظر ممیونه تا داده بر روی باس قرار بگیره و آماده خوندن بشه و پس از آماده شدن داده اون رو برمیگردونه

                      4. (bit uart_usb_tx_ready(void : این تابع چک میکنه که آیا یک بایت داده میتونه داخل اندپوینت fifo ورودی نوشته بشود یا خیر که اگر خروجی این تابع true باشه یعنی برنامه میتونه یک بایت داده جدید رو داخل اندپوینت ورودی برای ارسال بنویسه .

                      5.(int uart_usb_putchar(int data_to_send : این تابع بایت رو در قالب پارامتر داخل اندپیونت ورودی مینویسد در واقع این تابع بعد از آماده شدن اندپوینت برای نوشتن داده اون رو داخل اندپوینت قرار میده و بعد ارسال میکنه برای انجام این کار ابتدا توسط تابع (Usb_write_byte(data_to_send داده ها داخل اندپوینت قرار گرفته همزمان برای خالی کردن بافر و فرستادن آن برای ارسال داده ها تابع uart_usb_flush() رو قبل از اتمام انتظار برای اتمام ارسال داده انجام میده .
                      توجه : این تابع با استفاده از تعریف #define uart_usb_putchar putchar داخل فایل uart_usb_lib.h به جای تابع putchar عمل خواهد کرد بنابراین یاز هم میتوان از تابعی مثل printf که بر مبنای این تابع نوشته شده برای ارسال داده استفاده نمود مانند آنچه که در فایل cdc_task.c وجود دارد که برای ارسال مثلا رشته Hello from AT90USBXXX ! از تابع printf به صورت زیر استفاده کرده .

                      if(Is_hwb())
                      printf("Hello from AT90USBXXX !\r\n"


                      6.(void uart_usb_flush (void : این تابع داده های ذخیره شده داخل اندپوینت ورودی رو ارسال میکنه .

                      پایان قسمت سوم

                      پایان avr272


                      4.

                      دیدگاه


                        #12
                        پاسخ : کار با پورت USB میکرو های سری AT90USB

                        خیلی خوب داری پیش میری
                        منم همین الان جواب گرفتم. منتها با CDC نمیخوام شروع کنم دارم از base شروع میکنم :
                        AVR276: USB Software Library for AT90USBxxx Microcontrollers
                        ولی چون تو این تاپیک دوتایی بخوایم پیش بریم نا هماهنگی میشه یه تاپیک جدا زدم:
                        http://www.eca.ir/forum2/index.php?topic=56107.0

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

                        دیدگاه


                          #13
                          پاسخ : کار با پورت USB میکرو های سری AT90USB

                          با تشکر از جناب حیدری عزیز
                          بسیار خوب هر جور که شما صلاح میدونید .
                          البته تو هدف گزاری که برای این تایپیک در نظر گرفته بودم ،
                          (
                          خوب اگر دوستان مایل هستید این تایپیک رو فعلا در وحله اول اختصاص بدیم به بررسی appnote های avr272 و avr276 که برای استفاده از کلاس cdc نوشته شدند .بعد از اتمام کار بریم سراغ lufa نظرتون چیه ؟
                          )
                          این بود که اول این دو تا appnote بررسی بشه وبعد بریم برای بررسی مجموعه lufa که به نظر خیلی جامع تر میاد .(به لحاظ کار با کلاس های مختلف)
                          ولی اگر من بخام در ادامه چیزی از AVR-USB-162-CDC بگم باید مراجعه کنم به همین AVR276 که باعث ایجاد همپوشانی در مطالب این تایپیک و تایپیک شما خواهد شد چون من چیزی از خودم ندارم که عنوان کنم باید مطالب AVR276 بررسی کنم بعد دریافت هام رو بنویسم مواردی از کدها هم که توضیح دادم باید داده میشد وگرنه به نظرم نمیشد بدون دونستنشون مطالب بعدی رو فهمید لذا من قصد تحلیل رو نداشتم در هر صورت از این همفکری و هکاریتون صمیمانه تشکر میکنم .
                          پس ادامه این تایپیک پس از خاتمه بررسی AVR276 در تایپیک http://www.eca.ir/forum2/index.php?topic=56107.0


                          دیدگاه


                            #14
                            پاسخ : کار با پورت USB میکرو های سری AT90USB

                            خوب من معتقدم از کتابخونه های سازنده استفاده کنیم بهتره. چون اون در قبالش متعهده. هر چند این lufa هم خیلی چیز قوی ای به نظر میاد من که هنوز از هیچ کدوم کامل سر در نیاوردم بخوام نظر بدم. ولی کم کم داره دستم میاد اینا که اتمل داده چین و به چه درد میخورن به نظرم برخلاف ظاهر پیچیدشون خیلی راحتن حالا باید دید که آخر به کجا میرسم :mrgreen:
                            بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
                            اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

                            دیدگاه


                              #15
                              پاسخ : کار با پورت USB میکرو های سری AT90USB

                              با اجازه آقای حیدری
                              دیدم اگر این کارو کنم شاید بد نباشه ! :redface:

                              AVR276
                              USB Software Library for AT90USBxxx
                              Microcontrollers

                              در ابتدا چند تا اصطلاح و چند مورد که در سریع تر خوندن کد ها کمک میکنه معرفی شده :

                              1. VID: USB Vendor Identifier ( شماره مشخصه فروشنده )
                              2. PID: USB Product Identifier ( شماره مشخصه محصول )

                              در تمام فایل ها ثوابت با حروف بزرگ تعریف شده اند مانند فرکانس کار میکرو :
                              #define FOSC 8000

                              توابعی ماکرو تنها حرف اولشان با حروف بزرگ تعریف شده اند مانند تابع زیر :
                              #define Is_usb_sof() ((UDINT & MSK_SOFI) ? TRUE: FALSE)

                              برنامه کاربر میتونه یکسری توابع خاصی رو که نیاز به زمان کوتاهی برای اجرا دارند رو همزمان با اجرای یکسری رخ دادهای usb که لیست اون ها رو در زیر میبینید رو اجرا کنه :

                              کد:
                              #define Usb_sof_action()    
                              #define Usb_wake_up_action()
                              #define Usb_resume_action()
                              #define Usb_suspend_action()
                              #define Usb_reset_action()
                              #define Usb_vbus_on_action()
                              #define Usb_vbus_off_action()
                              #define Usb_set_configuration_action()

                              به عنوان مثال :

                              کد:
                              #define Usb_sof_action()     sof_action();

                              توجه : این تعاریف در فایل conf_usb.h انجام میشوند .

                              برای تغییر هر کدام از توصیف گر های رشته باید از تابع ماکروی Usb_unicode() استفاده نمود به عنوان مثال :

                              کد:
                              #define USB_PRODUCT_NAME \
                              { Usb_unicode('A') \
                               ,Usb_unicode('V') \
                               ,Usb_unicode('R') \
                               ,Usb_unicode(' ') \
                               ,Usb_unicode('U') \
                               ,Usb_unicode('S') \
                               ,Usb_unicode('B') \
                               ,Usb_unicode(' ') \
                               ,Usb_unicode('C') \
                               ,Usb_unicode('D') \
                               ,Usb_unicode('C') \
                               ,Usb_unicode(' ') \
                               ,Usb_unicode('D') \
                               ,Usb_unicode('E') \
                               ,Usb_unicode('M') \
                               ,Usb_unicode('O') \
                              }


                              USB Bus :

                              Bus topology :

                              دستگاه usb مطابق شکل زیر میتونند به دو صورت روی باس usb قرار بگیرند :


                              1.USB Host :
                              در سیستم usb تنها یک میزبان (host) وجود دارد و به عنوان مستر عمل میکنه . ارتباط سیستم usb با میزبان توسط یک کنترل کننده (USB interface) انجام میشود که توسط نرم افزار و سخت افزار قابل پیاده سازی است .

                              2. USB Device :
                              دستگاه usb که حداکثر میتوانند 127 وسیله باشند به عنوان اسلیو روی باس usb عمل میکنند و هر وسیله دارای یک آدرس مشخص میباشد .

                              که در اینجا میکرو های سری at90usb میتونند در دو مد USB Device و USB Host کار کند که البته در مد USB Host درستر هست که بگیم در مد USB Host تقلیل یافته چرا که reduced host controller تنها یک پورت usb منحصر بفرد دارد و نمیتواند با استفاده از هاب چندین دستگاه usb دیگر را میزبانی کنید . این به این معنی که reduced host controller تنها برای یک ارتباط منحصر بفرد بین دو نقطه از طریق یک پورت usb طراحی شده.
                              توجه کنید که reduced host controller تنها دستگاه هایی را که VIDو PID آنها در لیست VID/PID برنامه موجود باشند ساپورت میکگنه و میتواند آنها رو شناسایی کند .
                              همچنین AT90USBxxx USB software library قادر است که لیست CLASS/SUBCLASS/PROTOCOL از دستگاه usb مورد نظر را که در لیست VID/PID برنامه موجود باشند ساپورت نماید .

                              در شکل زیر توپولوژی یک سیستم usb با میزبان تقلیل یافته نمایش داده شده است :


                              به این ترتیب AT90USBxxx software library میتونه برای کار در سه مد زیر پیکره بندی بشه :
                              1. USB device
                              2. USB reduced host
                              3. USB dual role device

                              در مد سوم دو مد قبلی ساپورت میشوند و اینکه دستگاه در کدام مد کار میکند به این بستگی دارد که پایه ID در کانکتور USB به زمین متصل شده است یا خیر در صورتی که به زمین ومتصل باشد یا به عبارتی از کانکتور MiniA دستگاه در مد reduced host عمل خواهد کرد و در صورتی که به زمین متصل نشده باشد یا به عبارت دیگر از کانکتور mini B استفاده شده باشد دستگاه در مد device عمل خواهد کرد .
                              در مورد انواع کانکتور های USB و نحوه اتصالات پایه های هر کدام به عکس زیر دقت بفرمایید :


                              پایان قسمت اول

                              دیدگاه

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