اطلاعیه

Collapse
No announcement yet.

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

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

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

    من میخوام کیبرد usb رو به این میکرو متصل کنم ولی آنقدر کتابخونه ها و توابع LUFA پیچ در پیچ بود که نفهمیدم چی به چیه
    من حدود 2000 خط برنامه برای یه کاری نوشتم و فقط به جای کی پد میخوام کیبرد USB بزارم
    وسط راه هستم نمیدونم چیکار کنم . چون با Atmel Studio کار نکردم
    یه پوشه داره واسه HID
    اگه ممکن هست یه نگاهی بندازین و راهنمایی کنی
    چاره ای نیست یا از atmel studio باید استفاده کنید یا winavr. که به نظرم winavr کار باهاش خیلی راحت تره نهایتا شما باید یسری تنظیمات رو توی میک فایل تغییر بدید.
    مبنا رو باید بزارید روی یکی از همین demo های lufa بعد که تونستید جواب بگیرید ازش، کم کم توسعه اش بدید به برنامه مورد نظر خودتون، اگه فایل سورسی باید اضافه بشه تو میک فایل واردش کنید فایل هدرش رو اد کنید. یه سری تنطیمات مربوط به LED و پوش باتوم ها رو در صورتی که با سخت افزاری که استفاده میکنید هماهنگ نیست تنظیم کنید.
    در کل اول باید خود LUFA رو بتونید راه بندازید و ازش جواب بگیرید و بعد توسعه اش بدید LUFA برای SPI و I2C و UART و ADC کتابخونه داره اگه تو برنامه تون از این ها استفاده میکنید پیشنهاد میکنم از همین کتاخونه های خود LUFA استفاده کنید.
    DEMO ای که میگم اتو این مسیر میتونید پیداش کنید:
    LUFA\LUFA-130901\LUFA-130901\Demos\Host\LowLevel\KeyboardHost

    دیدگاه


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

      نوشته اصلی توسط mojtaba_led
      چاره ای نیست یا از atmel studio باید استفاده کنید یا winavr. که به نظرم winavr کار باهاش خیلی راحت تره نهایتا شما باید یسری تنظیمات رو توی میک فایل تغییر بدید.
      مبنا رو باید بزارید روی یکی از همین demo های lufa بعد که تونستید جواب بگیرید ازش، کم کم توسعه اش بدید به برنامه مورد نظر خودتون، اگه فایل سورسی باید اضافه بشه تو میک فایل واردش کنید فایل هدرش رو اد کنید. یه سری تنطیمات مربوط به LED و پوش باتوم ها رو در صورتی که با سخت افزاری که استفاده میکنید هماهنگ نیست تنظیم کنید.
      در کل اول باید خود LUFA رو بتونید راه بندازید و ازش جواب بگیرید و بعد توسعه اش بدید LUFA برای SPI و I2C و UART و ADC کتابخونه داره اگه تو برنامه تون از این ها استفاده میکنید پیشنهاد میکنم از همین کتاخونه های خود LUFA استفاده کنید.
      DEMO ای که میگم اتو این مسیر میتونید پیداش کنید:
      LUFA\LUFA-130901\LUFA-130901\Demos\Host\LowLevel\KeyboardHost
      ممنون دوست عزیز
      خدا خیرت بده
      من با کد ویژن کار میکنم
      میشه کد ها رو به کدویژن منتقل کنم ؟
      در ضمن
      با TWI و GLCD و USB و INTها و تایمرها و PWM قراره کار کنم
      آیا امکانش هست که همه رو تو کدویژن کنار هم قرار بدم (منظورم USB در کنار بقیه اش)
      اگه نمیشه
      تو Atmel AVR ببرم مشکلی برا کدهایی که نوشتم پیش نمیاد؟
      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
      معرفی نرم افزار Codewizard PWM
      با من بیشتر آشنا شوید

      دیدگاه


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

        کار که نشد نداره، اما! اینو بگم که خیلی ها اون اوایل سعی میکردن که با avr studio کار کنند و با کلی در دسر lufa رو به اون پورت میکردند در حالی که کامپایلر یکی بود حالا شما میخوایید به کدویژن پورت کنید! در ثانی باید با سینتکس avr-gcc آشنا باشید تا بدونید چی رو باید به چی تغییر بدید.

        برای انتقال کد از کدویژن به avr studio باید سینتکس رو رعایت کنید از کدویژن به avr studio سخت نیست البته توجه داشته باشید اگه از کتابخونه دارید استفاده میکنید باید سورش رو داشته باشید تا بتونید کد رو به همون صورت به avr studio منتقل کنید. در غیر این صورت باید از کتابخونه های دیگه که سورسشون موجود هست استفاده کنید.

        دیدگاه


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

          10. تغذیه AT90USB

          Device:

          دو روش برای تغذیه داریم:
          1. حالت Self Power:

          در این حالت تغذیه Core اصلی یعنی VCC , AVCC, UVCC توسط یک منبع خارجی و تغذیه VBUS از طریق پورت USB تامین میشه.
          در این حالت با توجه به اینکه ولتاژ تغذیه I/O میکرو 5 ولت یا 3.3ولت باشه دو نوع آرایش میتونیم استفاده
          کنیم:
          الف) تغذیه I/O 5 ولت باشه : در این حالت VCC , AVCC, UVCC به 5 ولت تغذیه اصلی متصل میشه و UCAP به خازن 1 میکرو فاراد (16 ولت و الکترولیت) و VBUS به پایه VCC پورت USB متصل میشه.

          ب) تغدیه I/O 3.3 ولت باشه: در این حالت AVCC, VCC, UCAP به 3.3 ولت خارجی متصل و UVCC بدون اتصال رها میشه و VBUS هم به VCC پورت USB متصل میشه.

          2. حالت BUS Power:
          در این حالت تغذیه BUS و I/O ها (Core اصلی) به وسیله VCC پورت USB خارجی تامین می گردند. در این حالت هم با توجه به تغذیه I/O که 5 ولت یا 3.3 ولت باشه دو حالت داریم:

          الف) تغذیه I/O 5 ولت باشه : در این حالت VCC , AVCC, UVCC, VBUS به VCC پورت USB متصل می¬شوند و UCAP به خازن 1 میکرو فاراد (16 ولت و الکترولیت) متصل میشه.
          ب) تغدیه I/O 3.3 ولت باشه: در این حالت UVCC, VBUS به صورا مستقیم به VCC پورت USB متصل میشوند و VCC , AVCC با استفاده از یک رگولاتور 3.3 ولت که ورودی این رگولاتور به VCC پورت USB متصل هست، تغذیه میشوند و UCAP به خازن 1 میکرو فاراد (16 ولت و الکترولیت) متصل میشه.

          Host:
          در این حالت با توجه به اینکه وسیله متصل شده به AVR دارای تغذیه نیست باید تغذیه VBUS رو از منبع خارجی تامین کرد. در این جا هم با توجه به تغذیه I/O که 5 ولت یا 3.3 ولت باشه دو حالت داریم:
          1. تغذیه I/O 5 ولت باشه : در این حالت VCC, AVCC, UVCC به صورت مستقیم به تغذیه خارجی و UCAP به خازن 1میکرو فاراد متصل می شوند. برای تغذیه VBUS با توجه به وجود پایه کنترلی UVCON میتونید با استفاده از یک PMOS (PMOS سطح یک رو بهتر عبور میده) ولتاژ تغذیه VBUS رو تامین کنید و یا اینکه به صورت مستقیم و بدون توجه به UVCON به تغذیه خارجی متصل کنیم.

          2. تغذیه I/O 3.3 ولت باشه (تغذیه خارجی 3.3 ولت باشه) : تو این حالت VCC, AVCC, UCAP به تغذیه 3.3 ولت خارجی متصل شده و همینطور یک خازن 1 میکرو فاراد هم به UCAP متصل میشه. پایه UVCC بدون اتصال رها میشه. برای تغذیه VBUS هم باید از یک منبع 5 ولت خارجی دیگه استفاده بشه که میتونه باز هم به مانند حالت الف با سوییچ یا بدون سوییچ به VBUS متصل بشه.
          __________________________________________________ _______________________________________
          ساده ترین حالت تغذیه برای استفاده در دو حالت Device و Host در حالتی که تغذیه I/O 5 ولت باشه:
          اگر میخواهید که تغذیه از طریق پورت USB تامین بشه VCC , AVCC, UVCC, VBUS به VCC پورت USB و UCAP هم به یک خازن 1میکروفاراد متصل کنید.
          اگر میخواهید که تغذیه از طریق یک منبع خارجی تامین بشه VCC , AVCC, UVCC, VBUS به تغذیه خارجی و UCAP هم به یک خازن 1میکروفاراد متصل کنید.
          یا جفتش رو یک جا استفاده کنید ولی باید مراقب باشید که تغذیه خارجی و USB (در مد دیوایس) همزمان وصل نباشند.

          توجه: پایه UCAP به صورت دیفالت توسط رگولاتور 3.3 ولت داخلی تغذیه اش تامین میشه در صورت غیر فعال کردن اون در برنامه باید از طریق یه رگولاتور 3.3 ولت خارجی تغذیه 3.3 ولت مورد نیاز این پایه رو تامین کنید.

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

          دیدگاه


            #50
            11. USB WAV Player

            11. USB WAV Player

            میکروکنترلر: AT90USB1287
            فرکانس اوسیلاتور خارجی : 8 مگ
            خروجی های صدای استریو: پایه های 15و16
            دکمه Play/Pause: پایه 41
            دکمه Next: پایه 33
            دکمه Previous: پایه 34
            دکمه Stop: پایه 39
            خروجی سریال : پایه TXD 28
            عملکرد برنامه به این ترتیب هست که فایلهایی که دارای پسوند wav هستن از داخل روت اصلی USB FLASH سرچ و به ترتیب شروع به پخش اون ها میکنه و البته میشه با دکمه هایی که در بالا به اون ها اشاره شده اجرای فایل ها رو کنترل کرد. و در همین حین تمام پروسه روی پورت سریال به نمایش در میاد.

            این نسخه دمو هست و محدودیت های زیر رو داره:
            1. تو این نسخه فایل هایwav که در روت اصلی flash قرار دارن سرچ و تا 5 تای اون های پخش میشن.
            2. فقط فایل های wav با سمپل ریت 44.1 کیلو هرتز 8 بیت و استریو رو میتونه پخش کنه.
            3. قابلیت تمیز دادن انواع فایل های wav رو نداره یعنی نباید فایل wav غیر از فرمت بالا تو flash باشه والا هر چیزی جز صدای مورد نظر رو خواهید شنید.
            4. قابلیت REPEAT کردن فایل های wav رو نداره.

            قابلیت ها:
            1. Play/Pause
            2. Next
            3. Previous
            4. Stop
            5. نمایش تمام پروسه بر روی پورت سریال

            http://s5.picofile.com/file/81103000...44_1k.rar.html

            پایان قسمت یازدهم

            دیدگاه


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

              گفتگوی پیش از این پست قابل مشاهده است .


              ادامه بحث
              اتصال کیبرد USB به میکرو AVR
              چندتا سوال دارم .
              1. برای کیبرد وصل کردن به هاست نیازی به پایه UVCON داره که بهش PMOS وصل کنم ؟
              2. چه کریستالی بزارم که هم بتونم با UART کار کنم هم بتونم با USB (چون برای USB باید با تقسیم فرکانسی خودمو بتونم برسونم به فرکانس 2مگاهرتز و با PLL به 48مگاهرتز ...)
              3. تنظیمات پورت COM چطوری هست ؟
              9600 و بدون پریتی و 8 بیتی و یک بیت Stop_bit . درسته ؟
              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
              معرفی نرم افزار Codewizard PWM
              با من بیشتر آشنا شوید

              دیدگاه


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

                نوشته اصلی توسط SAMAN.ASADI
                1. برای کیبرد وصل کردن به هاست نیازی به پایه UVCON داره که بهش PMOS وصل کنم ؟
                نه کلا نیازی به این بازیا فعلا نداریم. فعلا بیخیال این پایه بشید. همون پیکره بندی ساده که برای تغذیه گفتم استفاده کنید.

                نوشته اصلی توسط SAMAN.ASADI
                2. چه کریستالی بزارم که هم بتونم با UART کار کنم هم بتونم با USB (چون برای USB باید با تقسیم فرکانسی خودمو بتونم برسونم به فرکانس 2مگاهرتز و با PLL به 48مگاهرتز ...)
                8 مگ بزارید. جواب میده، من جواب گرفتم. شما اگه با دمو های LUFA کار کنید دیگه درگیر تنظیمات مربوط به PLL نخواهید شد. فقط باید کریستال خارجی باشه. من فرکانسای دیگه رو امتحان نکردم ولی فکر کنم 16 مگ هم بشه.

                نوشته اصلی توسط SAMAN.ASADI
                3. تنظیمات پورت COM چطوری هست ؟
                9600 و بدون پریتی و 8 بیتی و یک بیت Stop_bit . درسته ؟
                تنظیمات رو در هایپر ترمینال ویندوز مطابق با اونچه که در دمو های LUFA هست انجام بدید مثل زیر:
                PIC1




                دیدگاه


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

                  سلام دوست خوبم
                  رفتم مدار رو PCB کردم و تست زدم
                  ولی به مشکل برخوردم
                  دیدم که هایپر ترمینال داره چرت و پرت مینویسه
                  گشتم و گشتم فهمیدم که باید داده دریافتیمو بکنم 7بیتی و با Stop bit 2 بیتی!
                  بعد دیدم باز هم داره بعضی موقع ها اشتباهی یه چیزای دیگه چاپ میکنه و فهمیدم که مشکل از نرخ ارساله
                  چون با درصد خطا روبرو بود
                  نرخ ارسال رو کردم 1200 دیگه خیلی بهتر شد .
                  ولی اطلاعات خیلی به کندی صورت میگرفت .
                  داره کم کم خوشم میاد . . .
                  خدایی دیگه مثل دفعه قبلی نیست . چون الان پیشرفتم خیلی بهتر بود .
                  البته با کمک شما

                  بگذریم
                  آقا مجتبی اینم اون کدهایی بود که میخواستید
                  کد:
                  Back Space	= 0X2A
                  Number lock 	= 0x53
                  /	 	= 0x54
                  *	 	= 0x55
                  -	 	= 0x56
                  +	 	= 0x57
                  Enter	 	= 0x58
                  1	 	= 0x59
                  2	 	= 0x5A
                  3	 	= 0x5B
                  4	 	= 0x5C
                  5	 	= 0x5D
                  6	 	= 0x5E
                  7	 	= 0x5F
                  8	 	= 0x60
                  9	 	= 0x61
                  0	 	= 0x62
                  .	 	= 0x63
                  ولی یه مشکلی هم هست
                  من دوتا کیبرد خریدم
                  یکی IBM و دیگری مارک XP
                  کیبرد XP دقیقا مثل همون حرفتون کار میکنه
                  با یک دوره تقریبا 1ثانیه نشون میده
                  اما اون کیبرد IBM به صورت وقفه ای کار میکرد . . .
                  موقعی که دستم رو روی کلید میزاشتم کد اون عدد چاپ میشد و موقعی که دستم رو از رو کیبرد برمیداشتم صفر رو نشون میداد !
                  ولی این برای همیشه کار نمیکرد
                  فقط و فقط برای 5 بار کلید زدن بیشتر کار نمیکرد و میکرو هنگ میکرد ...
                  بعضی موقع ها هم کمتر از 5 تا کلید !
                  نفهمیدم دلیلش چیه . . .

                  بگذریم
                  اینم اون مرحله ای که میخواستید
                  مرحله بعدی چیه ؟؟
                  شما امر کنید تا من همون کار رو کنم .

                  خیلی ممنون از زحمات شما
                  [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                  معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                  معرفی نرم افزار Codewizard PWM
                  با من بیشتر آشنا شوید

                  دیدگاه


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

                    برای دوستانی که کد حروف رو میخواهند :
                    کد:
                    Main Keys
                    ====================================================
                    A		= 0X04
                    B		= 0X05
                    C		= 0X06
                    D		= 0X07
                    E		= 0X08
                    F		= 0X09
                    G		= 0X0A
                    H		= 0X0B
                    I		= 0X0C
                    J		= 0X0D
                    K		= 0X0E
                    L		= 0X0F
                    M		= 0X10
                    N		= 0X11
                    O		= 0X12
                    P		= 0X13
                    Q		= 0X14
                    R		= 0X15
                    S		= 0X16
                    T		= 0X17
                    U		= 0X18
                    V		= 0X19
                    W		= 0X1A
                    X		= 0X1B
                    Y		= 0X1C
                    Z		= 0X1D
                    1		= 0X1E
                    2		= 0X1F
                    3		= 0X20
                    4		= 0X21
                    5		= 0X22
                    6		= 0X23
                    7		= 0X24
                    8		= 0X25
                    9		= 0X26
                    0		= 0X27
                    Main Enter	= 0X28
                    Esc		= 0X29
                    Back Space	= 0X2A
                    Tab		= 0x2B
                    Space		= 0x2C
                    -		= 0x2D
                    =		= 0x2E
                    [		= 0x2F
                    ]		= 0X30
                    \		= 0X31
                    		= 0X32 ******* 
                    ;		= 0X33
                    '		= 0X34
                    `~		= 0X35
                    ,		= 0X36
                    .		= 0X37
                    /		= 0X38
                    Caps Lock	= 0X39
                    F1		= 0X3A
                    F2		= 0X3B
                    F3		= 0X3C
                    F4		= 0X3D
                    F5		= 0X3E
                    F6		= 0X3F
                    F7		= 0X40
                    F8		= 0X41
                    F9		= 0X42
                    F10		= 0X43
                    F11		= 0X44
                    F12		= 0X45
                    ---------------------------------------------------------------------
                    Middle Keys
                    ====================================================
                    Print Screen	= 0X46
                    Scroll Lock	= 0X47
                    Pause		= 0X48
                    Insert		= 0X49
                    Home		= 0X4A
                    Page Up		= 0X4B
                    Delete		= 0X4C
                    End		= 0X4D
                    Page Down	= 0X4E
                    Right		= 0X4F
                    Left		= 0X50
                    Down		= 0X51
                    Up		= 0X52
                    ---------------------------------------------------------------------
                    Right Keys
                    ====================================================
                    Number lock 	= 0x53
                    /	 	= 0x54
                    *	 	= 0x55
                    -	 	= 0x56
                    +	 	= 0x57
                    Enter	 	= 0x58
                    1	 	= 0x59
                    2	 	= 0x5A
                    3	 	= 0x5B
                    4	 	= 0x5C
                    5	 	= 0x5D
                    6	 	= 0x5E
                    7	 	= 0x5F
                    8	 	= 0x60
                    9	 	= 0x61
                    0	 	= 0x62
                    .	 	= 0x63
                    ====================================================
                    		= 0x64 *******
                    Right click	= 0x65
                    بعضی از کدها رو که به دست نیاوردم با 7تا ستاره مشخص کردم
                    اون برنامه ای که با اون آدرسی که آقا مجتبی گفتند لازم هست یه توضیح بدم
                    این برنامه هشت بایت را به صورت دوره ای (تقریبا" یک ثانیه ای) به پورت سریال میفرسته که با هایپر ترمینال قابل مشاهده هست .
                    بایت اول : واسه کلید های کنترلی هست ( Ctrl و ALT و Shift و علامت Start )

                    بایت دوم : نفهمیدم واسه چی هست
                    بایت سوم تا هشتم : که دارای شش بایت هست مربوط به این هست که اگر چند کلید را با هم بزنیم در این 6 بایت جای میگیرد .
                    البته لازم به ذکر هست که بگم همیشه 6 کلید کاربرد نداره و در بعضی جاها 2تا کلید رو بیشتر نمیشه گرفت (در بعضی جاهای دیگر 3تا یا 4تا یا 5تا یا 6تا)این امکانات در بازی ها کاربرد دارد (بازی ماشینی که میشه دونفره هم با کیبرد بازی کرد)

                    بررسی خطا :اگر کلیدهای بیشتر را نگه داریم خطا میدهد و تمام هشت بایت مساوی یک میشود که این Error محسوب میشود . شاید یکی از کاربردهای بایت دوم همین باشد که اگر مساوی یک شد با خطا روبرو هستیم .
                    اینها رو گفتم که شاید یه بنده خدایی مثل من خواست کیبرد USB رو به میکروهای AT90USB1287 یا AT90USB647 وصل کنه

                    آقا مجتبی خیلی ممنون از زحمات شما
                    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                    معرفی نرم افزار Codewizard PWM
                    با من بیشتر آشنا شوید

                    دیدگاه


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

                      چه میکنه این آقا سامان، چه زحمتی بردار؟ همه کارا رو آقای camera انجام دادن و همه چی رو حاضر و آماده کردن.
                      راستی آقا راضی به زحمت نبودیم که برید همه کدها رو استخراج کنی! من برای اینکه مطمئن بشم تونستید lufa رو راه بندازید گفتم اون کار رو بکنید. کلیه کدهای مربوط به کلید های صفحه کلید توی اون داکیومنت آموزشی تحت وب lufa هست. اینو تو اون قسمت سرچش، سرچ کنید:
                      HID_KEYBOARD_SC_SPACE

                      و یه مورد دیگه که یادم امد، اگه با WinAVR کار میکنید بگید تا چند تا مورد رو بگم تا یکم محیط PN براتون به اصطلاح یوزر فرندلی تر بشه (یه چیزی تو مایه های کدویژن).

                      خوب آقا تمومه دیگه! در واقع مرحله بعدی وجود نداره، شما با همین اطلاعاتی که بدست آوردید میتونید application تون رو پیاده کنید. ولی از اونجا که برای کلاس کیبرد دمو به طور خاص وجود داره ما باهمون کار میکنیم از این جنریک میتونید برای دیوایسایی که کلاسشون مشخص نیست استفاده کنید، یعنی هر "usb هیومن اینترفیس دیوایسی" رو میتونید به میکروتون با این دمو متصل کنید و ازش دیتا بگیرید و همینطور براش بفرستید.
                      خوب پس حالا برید سراغ این دمو:
                      \LUFA\LUFA-130901\LUFA-130901\Demos\Host\ClassDriver\KeyboardHost

                      اما این بار برای اینکه یکم برنامه تون standalone تر بشه، از این پوشه برنامه ای که گفتم یه کپی بگیرید بزاریدش توی هر دایرکتوریی که دوست دارید و معمولا پروژه هاتون رو اونجا میزارید. حالا make file روباز کنید بعد جای این خط:


                      LUFA_PATH = ../../../../LUFA

                      اینو اینو بزارید:


                      LUFA_PATH = G:\Projects\WinAVR\LUFA\LUFA-130901\LUFA-130901\LUFA

                      البته حتما متوجه منظور من شدید ولی باز میگم، آدرس رو آدرس دایرکتوری پوشه lufa تو سیستم خودتون بزارید.

                      خوب حالا برای اینکه یکم از این شلوغ پلوغی برنامه خلاص شید یه فایل سورس به نام main و پسوند .c و یه فایل هدر به نام prefix با پسوند .h بسازید و دخیره کنید تو دایرکتوری برنامه، حالا برید داخل make file و target رو بزارید main و اونی که قبلا target بوده رو بزارید خط پایینش، با یه اسپیس فاصله از نوشته های قبلیش، بعد یه .c بهش اضافه کنید.

                      حالا برید دخل prefix.h و اینا رو توش کپی کنید:

                      کد:
                      #ifndef _PREFIX_H_
                      #define _PREFIX_H_
                      
                      		#include "KeyboardHost.h"
                      		
                      		extern USB_ClassInfo_HID_Host_t Keyboard_HID_Interface;
                      	
                      
                      #endif
                      بعد برید داخل KeyboardHost.c و اینا رو cut کنید و بعد past کنید داخل main.c :

                      کد:
                      /** Main program entry point. This routine configures the hardware required by the application, then
                       * enters a loop to run the application tasks in sequence.
                       */
                      int main(void)
                      {
                      	SetupHardware();
                      
                      	puts_P(PSTR(ESC_FG_CYAN "Keyboard Host Demo running.\r\n" ESC_FG_WHITE));
                      
                      	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
                      	GlobalInterruptEnable();
                      
                      	for (;;)
                      	{
                      		KeyboardHost_Task();
                      
                      		HID_Host_USBTask(&Keyboard_HID_Interface);
                      		USB_USBTask();
                      	}
                      }
                      
                      /** Configures the board hardware and chip peripherals for the demo's functionality. */
                      void SetupHardware(void)
                      {
                      #if (ARCH == ARCH_AVR8)
                      	/* Disable watchdog if enabled by bootloader/fuses */
                      	MCUSR &= ~(1 << WDRF);
                      	wdt_disable();
                      
                      	/* Disable clock division */
                      	clock_prescale_set(clock_div_1);
                      #endif
                      
                      	/* Hardware Initialization */
                      	Serial_Init(9600, false);
                      	LEDs_Init();
                      	USB_Init();
                      
                      	/* Create a stdio stream for the serial port for stdin and stdout */
                      	Serial_CreateStream(NULL);
                      }
                      
                      /** Task to manage an enumerated USB keyboard once connected, to display key state
                       * data as it is received.
                       */
                      void KeyboardHost_Task(void)
                      {
                      	if (USB_HostState != HOST_STATE_Configured)
                      	 return;
                      
                      	if (HID_Host_IsReportReceived(&Keyboard_HID_Interface))
                      	{
                      		USB_KeyboardReport_Data_t KeyboardReport;
                      		HID_Host_ReceiveReport(&Keyboard_HID_Interface, &KeyboardReport);
                      
                      		LEDs_ChangeLEDs(LEDS_LED1, (KeyboardReport.Modifier) ? LEDS_LED1 : 0);
                      
                      		uint8_t KeyCode = KeyboardReport.KeyCode[0];
                      
                      		if (KeyCode)
                      		{
                      			char PressedKey = 0;
                      			static uint8_t	LEDReport;
                      			
                      			LEDs_ToggleLEDs(LEDS_LED2);
                      
                      			/* Retrieve pressed key character if alphanumeric */
                      			if ((KeyCode >= HID_KEYBOARD_SC_A) && (KeyCode <= HID_KEYBOARD_SC_Z))
                      			{
                      				PressedKey = (KeyCode - HID_KEYBOARD_SC_A) + 'A';
                      			}
                      			else if ((KeyCode >= HID_KEYBOARD_SC_1_AND_EXCLAMATION) &
                      			     (KeyCode < HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS))
                      			{
                      				PressedKey = (KeyCode - HID_KEYBOARD_SC_1_AND_EXCLAMATION) + '1';
                      			}
                      			else if (KeyCode == HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS)
                      			{
                      				PressedKey = '0';
                      			}
                      			else if (KeyCode == HID_KEYBOARD_SC_SPACE)
                      			{
                      				PressedKey = ' ';
                      			}
                      			else if (KeyCode == HID_KEYBOARD_SC_ENTER)
                      			{
                      				PressedKey = '\n';
                      			}				
                      			if (PressedKey)
                      			 putchar(PressedKey);
                      		}
                      	}
                      }
                      و البته ابتدای فایل main هم اون هدر prefix.h رو هم اینکلود کنید. (اینکار (Standalone تر کردن) رو برای دمو های دیگه با همین روال میتونید انجام بدید).

                      حالا برنامه رو کامپایل کنید.

                      دیدگاه


                        #56
                        پیش فرض کپی کردن اطلاعات داخل یک فلش مموری به فلش مموری دیگر توسط میکرو

                        سلام مهندس، خسته نباشید...

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

                        دراین مورد خیلی سرچ کردم، فهمیدم که برای ارتباط فلش مموری با میکرو، یا باید از آی سی های واسط usb host مثل ch376 یا vnc1l یا sl811hs (که تو فروشگاه خودمون هم موجود هست) استفاده کنم، یا باید از میکروهایی که خودشون usb host دارن مثل میکروهای avr سری های at90usb یا میکروهای arm استفاده کنم.

                        نوع آی سی واسط یا نوع میکرو برام مهم نیست، فقط پایین بودن قیمت و بالابودن سرعت مهمه برام. قیمت نهایی مدار نباید از 20 هزار تومن بیشتر بشه.

                        نوشته های ارزشمند شما رو مطالعه کردم، به این نتیجه رسیدم که شما میتونید کمکم کنید و راهنماییم کنید.
                        مهندس به نظر شما چیکار کنم و از کدوم روش استفاده کنم؟؟

                        متاسفانه کارم خیلی خیلی گیره و وقت کمی دارم. :cry2:

                        دیدگاه


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

                          نوشته اصلی توسط mojtaba_led
                          و یه مورد دیگه که یادم امد، اگه با WinAVR کار میکنید بگید تا چند تا مورد رو بگم تا یکم محیط PN براتون به اصطلاح یوزر فرندلی تر بشه (یه چیزی تو مایه های کدویژن).
                          سلام.
                          میشه لطفا اینو به من بگید. چون من با WinAVR در محیط PN کار می‎کنم.
                          خیلی ممنونم از لطفتون.

                          دیدگاه


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

                            نوشته اصلی توسط sobhan537
                            سلام مهندس، خسته نباشید...

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

                            دراین مورد خیلی سرچ کردم، فهمیدم که برای ارتباط فلش مموری با میکرو، یا باید از آی سی های واسط usb host مثل ch376 یا vnc1l یا sl811hs (که تو فروشگاه خودمون هم موجود هست) استفاده کنم، یا باید از میکروهایی که خودشون usb host دارن مثل میکروهای avr سری های at90usb یا میکروهای arm استفاده کنم.

                            نوع آی سی واسط یا نوع میکرو برام مهم نیست، فقط پایین بودن قیمت و بالابودن سرعت مهمه برام. قیمت نهایی مدار نباید از 20 هزار تومن بیشتر بشه.

                            نوشته های ارزشمند شما رو مطالعه کردم، به این نتیجه رسیدم که شما میتونید کمکم کنید و راهنماییم کنید.
                            مهندس به نظر شما چیکار کنم و از کدوم روش استفاده کنم؟؟

                            متاسفانه کارم خیلی خیلی گیره و وقت کمی دارم. :cry2:
                            اگه بخواهید با at90usb یا arm این کار رو بکنید که بیشتر از 20 تومن(!) میشه اون تبدیلهایی هم که گفتید من باهاشون کار نکردم نمیدونم.
                            چیزی که به ذهنم میرسه دوتا at90usb یا arm میخواد، با یکی داده رو بخونید از توی فلش اول بعد از طریق spi بفرسته به میکرو بعدی و اون بنویسه داخل فلش دوم!
                            سرعت هم نمیدونم چی بگم ولی فکر نمیکنم با AVR با فرکانس 8 مگ به نیم مگا بایت پر سکند هم برسه.

                            نوشته اصلی توسط سینا_80
                            میشه لطفا اینو به من بگید. چون من با WinAVR در محیط PN کار می‎کنم.
                            خیلی ممنونم از لطفتون.
                            البته چیز خاصی نیست، برید به tools --> option --->advac..-->defult حالا فونت رو بزارید courier new تو همونجا رنگ پس زمینه رو یه خورده تیره کنید بعد رنگ کلمات کلیدی رو به دلخواهتون تغییر بدید و ...، یه مورد دیگه هم برید به اتو کامپیلیت اونجا اون تیک رادیویی رو بزاید روی after ، همین!



                            دیدگاه


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

                              دوست خوبم
                              سلام
                              روزت مبارک (روز مهندسی)
                              آقا حله ....
                              کارم راه افتاده ...
                              از سر ذوق .... :cry2: بعد از چند ماه انتظار گره کارم به دست شما باز شد :applause: واقعا نمیدونم با چه زبونی از شما تشکر کنم ...

                              فقط چند تا سوال دارم
                              قسمت زیر برنامه رو تغییر دادم یه خطایی میده نفهمیدم چی میگه
                              کد:
                              void KeyboardHost_Task(void)
                              {
                              	uint8_t Key;
                              	if (USB_HostState != HOST_STATE_Configured)
                              	 return;
                              	if (HID_Host_IsReportReceived(&Keyboard_HID_Interface))
                              	{
                              		USB_KeyboardReport_Data_t KeyboardReport;
                              		HID_Host_ReceiveReport(&Keyboard_HID_Interface, &KeyboardReport);
                              		LEDs_ChangeLEDs(LEDS_LED1, (KeyboardReport.Modifier) ? LEDS_LED1 : 0);
                              		Key = KeyboardReport.KeyCode[0];
                              		if (Key)
                              		{
                              			if	(key >= HID_KEYBOARD_SC_KEYPAD_1_AND_END &&
                              				 key <= HID_KEYBOARD_SC_KEYPAD_9_AND_PAGE_UP)//putchar(key-40);
                              			{
                              				if	  (key == HID_KEYBOARD_SC_KEYPAD_1_AND_END)putchar('1');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_2_AND_DOWN_ARROW)putchar('2');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_3_AND_PAGE_DOWN)putchar('3');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_4_AND_LEFT_ARROW)putchar('4');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_5)putchar('5');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_6_AND_RIGHT_ARROW)putchar('6');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_7_AND_HOME)putchar('7');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_8_AND_UP_ARROW)putchar('8');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_9_AND_PAGE_UP)putchar('9');
                              			}
                              			else if(key == HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT)putchar('0');
                              			else if(key == HID_KEYBOARD_SC_KEYPAD_DOT_AND_DELETE)putchar('.');
                              			else if(key == HID_KEYBOARD_SC_KEYPAD_SLASH)putchar('/');
                              			else if(key == HID_KEYBOARD_SC_KEYPAD_ASTERISK)putchar('*');
                              			else if(key == HID_KEYBOARD_SC_KEYPAD_MINUS)putchar('-');
                              			else if(key == HID_KEYBOARD_SC_KEYPAD_PLUS)putchar('+');
                              			else if(key == HID_KEYBOARD_SC_KEYPAD_ENTER)putchar('E');
                              			else if(key == HID_KEYBOARD_SC_BACKSPACE)putchar('B');
                              			else if(key == HID_KEYBOARD_SC_NUM_LOCK)putchar('N');
                              			putchar(0x0A);
                              			putchar(0x0D);
                              		}
                              	}
                              }
                              اینا رو گذاشتم
                              خط
                              کد:
                              			if	(key >= HID_KEYBOARD_SC_KEYPAD_1_AND_END &&
                              				 key <= HID_KEYBOARD_SC_KEYPAD_9_AND_PAGE_UP)
                              			{
                              				if	  (key == HID_KEYBOARD_SC_KEYPAD_1_AND_END)putchar('1');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_2_AND_DOWN_ARROW)putchar('2');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_3_AND_PAGE_DOWN)putchar('3');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_4_AND_LEFT_ARROW)putchar('4');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_5)putchar('5');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_6_AND_RIGHT_ARROW)putchar('6');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_7_AND_HOME)putchar('7');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_8_AND_UP_ARROW)putchar('8');
                              				else if(key == HID_KEYBOARD_SC_KEYPAD_9_AND_PAGE_UP)putchar('9');
                              			}
                              این پیغام خطا رو میده :cry2:
                              کد:
                              main.c:61: error: 'key' undeclared (first use in this function)
                              main.c:61: error: (Each undeclared identifier is reported only once
                              main.c:61: error: for each function it appears in.)
                              یه سوال دیگه
                              من دو تا کیبرد از مارکهای مختلف گرفتم (XP و IBM)
                              کیبرد XP هر یک ثاتیه یک بار خودش اسکن میکنه (البته اگر دکمه را تند تند بزنیم تند تند هم چاپ میکنه)
                              ولی کیبرد IBM به صورت حساس به کلید فشار دادن هست (حساس به لبه پایین رونده)
                              اگر کلید رو بزنیم و نگه داریم چاپ میکنه و منتظر میشینه تا زمانی که دستمون رو از رو کلید برداریم !
                              نفهمیدم کجاش رو دستکاری کنم ... که اون چیزایی که میخوام به دست بیارم
                              خوب اینها رو گفتم که دو تا سوالی بکنم
                              1. در کیبرد XP میشه زمان اسکن را تنظیم کنم ؟؟؟
                              2. در کیبرد IBM میشه این رو هم مثل همون کیبرد بکنم که پشت سر هم اسکن کنه ؟؟؟

                              یه سوال دیگه
                              من هر کاری کردم نتونستم چراغهای کیبرد رو خاموش و روشن کنم ...
                              توی داکیمنتش خیلی گشتم و مثالهایی که زده بود رو اجرا کردم ولی نشد که بشه ....
                              البته نیازی به این چراغها ندارم ولی بدونم بهتره (برای دوستانی که علاقه دارند به خصوص من :agree

                              با سپاس :applause:
                              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                              معرفی نرم افزار Codewizard PWM
                              با من بیشتر آشنا شوید

                              دیدگاه


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

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

                                والا من تاحالا با اینا کار نکردم ولی احتمالا یکسری کامند باشه که بشه براشون ارسال کرد تا مثلا این دیبانس رو تنظیم کرد باید بسرچی، اگه سوال داشتی برو تو گروه lufa اونجا بپرس زودتر به جواب میرسی:
                                http://groups.google.com/group/lufa-support

                                در مورد چراغ ها هم بله میشه روشن خاموششون کرد یکسری کامند هست که با فرستادن اونا میتونی باهشون هر کدوم از چراغ ها را خواستی خاموش و روشن کنی یه راهنمایی میکنم ببین خودت میتونی راهش بندازی یا نه، باید از تابع HID_Host_SendReportByID استفاده کنی، برو توی اون آموزش تحت وب lufa اینو سرچ کن ببین میتونی عملکردش رو متوجه بشی، بعد باهاش میتونی چراغ ها رو خاموش و روشن کنی.

                                دیدگاه

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