اطلاعیه

Collapse
No announcement yet.

usb به روایت دیگر

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

    usb به روایت دیگر

    هوالعالم

    سلام
    برای اتصال avr ها به میکرو، روش های گوناگونی ارائه شده است.
    سابقا از تراشه ی FT232rl استفاده می کردم. تراشه خیلی خوبی بود و خوشدست تا این اواخر...
    که بدلیل بازی در آوردن شرکت FTDI چنین مشکلی پیش آمد
    http://www.eca.ir/forum2/index.php?topic=101834.0

    مشکل را ریشه ای حل کردم و آمدم سراغ تراشه های AT90usb

    برای کار با این تراشه ها، سابقا رنج زیادی کشیده می شد و کتابخانه های طولانی و ...
    http://www.eca.ir/forum2/index.php?topic=55963.0
    http://www.eca.ir/forum2/index.php?topic=89285.0
    و البته تلاش دوستان پیشتاز کاملا قابل احترام است


    اما ایندفعه به لطف پیشرفت کدویژن، کار بسیار ساده تر شده.
    کافیه کدویژن ورژن 3.12 دانلود شود.

    از سایت زیر دانلود کنید:
    http://electrolab.ir/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-codevisionavr-v3-12/
    با پسوورد electrolab.ir بازش کنید
    بعد از نصب دو فایلی رو که داخل دایرکتوری CRACK هست از زیپ خارج کنید و داخل دایرکتوری BIN کدویژن بجای فایلهای قبلی بریزید.

    بعدش در قسمت کدویزارد
    تراشه at90usb162 انتخاب شود
    در بخش usb، تیک enable را بنزید و usb cdc انتخاب کنید
    بعد اون چرخدنده زده بشه.

    حالا کافیه این تکه کد کوچک قبل از MAIN برنامه اضافه بشه
    [code=c]
    #define _ALTERNATE_PUTCHAR_
    void putchar(char c)
    {
    usb_serial_putchar(c);
    }
    [/code]

    تموم!!
    این هم یه نمونه کد برنامه
    [code=c]
    /************************************************** *****
    This program was created by the
    CodeWizardAVR V3.12 Advanced
    Automatic Program Generator
    © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 12/14/2014
    Author :
    Company :
    Comments:


    Chip type : AT90USB162
    Program type : Application
    AVR Core Clock frequency: 16.000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 128
    ************************************************** *****/

    #include <90usb162.h>

    #include <delay.h>

    // USB Device functions
    #include <usb_device.h>
    // USB Device functions
    //#include <stdio.h>

    // USB CDC Virtual Serial Port functions
    #include <usb_cdc.h>

    // USB initialization
    #include "usb_init.h"

    // Declare your global variables here


    // Use the USB Virtual Serial Port as printf output
    #define _ALTERNATE_PUTCHAR_
    void putchar(char c)
    {
    usb_serial_putchar(c);
    }


    void main(void)
    {
    // Declare your local variables here

    // Crystal Oscillator division factor: 1
    #pragma optsize-
    CLKPR=(1<<CLKPCE);
    CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif

    // Input/Output Ports initialization
    // Port B initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

    // Port C initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit2=In Bit1=In Bit0=In
    DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit2=T Bit1=T Bit0=T
    PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

    // Port D initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0A output: Disconnected
    // OC0B output: Disconnected
    TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
    TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;
    OCR0A=0x00;
    OCR0B=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Disconnected
    // OC1B output: Disconnected
    // OC1C output: Disconnected
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    // Compare C Match Interrupt: Off
    TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<COM1C1) | (0<<COM1C0) | (0<<WGM11) | (0<<WGM10);
    TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    OCR1CH=0x00;
    OCR1CL=0x00;

    // Timer/Counter 0 Interrupt(s) initialization
    TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0);

    // Timer/Counter 1 Interrupt(s) initialization
    TIMSK1=(0<<ICIE1) | (0<<OCIE1C) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1);

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    // INT3: Off
    // INT4: Off
    // INT5: Off
    // INT6: Off
    // INT7: Off
    EICRA=(0<<ISC31) | (0<<ISC30) | (0<<ISC21) | (0<<ISC20) | (0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
    EICRB=(0<<ISC71) | (0<<ISC70) | (0<<ISC61) | (0<<ISC60) | (0<<ISC51) | (0<<ISC50) | (0<<ISC41) | (0<<ISC40);
    EIMSK=(0<<INT7) | (0<<INT6) | (0<<INT5) | (0<<INT4) | (0<<INT3) | (0<<INT2) | (0<<INT1) | (0<<INT0);
    // PCINT0 interrupt: Off
    // PCINT1 interrupt: Off
    // PCINT2 interrupt: Off
    // PCINT3 interrupt: Off
    // PCINT4 interrupt: Off
    // PCINT5 interrupt: Off
    // PCINT6 interrupt: Off
    // PCINT7 interrupt: Off
    PCMSK0=(0<<PCINT7) | (0<<PCINT6) | (0<<PCINT5) | (0<<PCINT4) | (0<<PCINT3) | (0<<PCINT2) | (0<<PCINT1) | (0<<PCINT0);
    // PCINT8 interrupt: Off
    // PCINT9 interrupt: Off
    // PCINT10 interrupt: Off
    // PCINT11 interrupt: Off
    // PCINT12 interrupt: Off
    PCMSK1=(0<<PCINT12) | (0<<PCINT11) | (0<<PCINT10) | (0<<PCINT9) | (0<<PCINT8);
    PCICR=(0<<PCIE1) | (0<<PCIE0);

    // USART1 initialization
    // USART1 disabled
    UCSR1B=(0<<RXCIE1) | (0<<TXCIE1) | (0<<UDRIE1) | (0<<RXEN1) | (0<<TXEN1) | (0<<UCSZ12) | (0<<RXB81) | (0<<TXB81);

    // Analog Comparator initialization
    // Analog Comparator: Off
    // The Analog Comparator's positive input is
    // connected to the AIN0 pin
    // The Analog Comparator's negative input is
    // connected to the AIN1 pin
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
    // Digital input buffer on AIN0: On
    // Digital input buffer on AIN1: On
    DIDR1=(0<<AIN0D) | (0<<AIN1D);

    // SPI initialization
    // SPI disabled
    SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);


    // USB Controller initialization in device mode
    // Note: This function also initializes the PLL
    usb_init_device(&usb_config);

    // Global enable interrupts
    #asm("sei&quot

    // Wait for the USB device to be enumerated by the host
    while (!usb_enumerated);

    // Wait 1.5 seconds for the operating system to
    // load any drivers needed by the USB device
    delay_ms(1500);

    // Wait for the USB host to be ready to receive serial data by
    // setting the CDC Virtual Serial Port's RS-232 DTR signal high
    while (usb_cdc_serial.control.dtr==0);

    while (1)
    {
    puts("Holoooooooooooooooooooooooo!"
    }
    }
    [/code]

    درایورش اش هم داخل پوشه کدویژن هست.
    این مسیر
    [code=text]
    C:\cvavr\EXAMPLES\USB\CDC Virtual Serial Port
    [/code]
    همین :wow:
    برای کاری در حوزه اربعین نیاز به نیروی داوطلب هستیم.
    http://hosseinwalkingday.com

    #2
    پاسخ : usb به روایت دیگر

    بریم سراغ PICدیگه کم کم

    USBهاست داره خیلی راحت تر از اینه :read:

    دیدگاه


      #3
      پاسخ : usb به روایت دیگر

      AVR CDC یک رابط نرم افزاری برای تبدیل USB به RS232 و TTL میکروهای AVR هست. که بر پایه ی VUSB خیلی وقت قبل کار شده. من نتونستم روی win8 ازش جواب بگیرم.

      الان همه ی این ها رو نوشتم بپرسم این روش روی win7-8 کار میده؟ :redface:
      و درایور هاش بدون مشکل راه میافته؟

      دیدگاه


        #4
        پاسخ : usb به روایت دیگر

        نوشته اصلی توسط MReza.p
        AVR CDC یک رابط نرم افزاری برای تبدیل USB به RS232 و TTL میکروهای AVR هست. که بر پایه ی VUSB خیلی وقت قبل کار شده. من نتونستم روی win8 ازش جواب بگیرم.

        الان همه ی این ها رو نوشتم بپرسم این روش روی win7-8 کار میده؟ :redface:
        و درایور هاش بدون مشکل راه میافته؟
        سلام
        روی ویندوز 8.1 بدون اذیت راه افتاد

        کل زمانی که خرج راه انداختن مدار و برنامه نویسی کردم از نوشتن این خطوط کمتر طول کشید.
        با HID Generic هم می شه اما هنوز تست نگرفتم.
        برای کاری در حوزه اربعین نیاز به نیروی داوطلب هستیم.
        http://hosseinwalkingday.com

        دیدگاه


          #5
          پاسخ : usb به روایت دیگر

          نوشته اصلی توسط بنیامین 20
          بریم سراغ PICدیگه کم کم

          USBهاست داره خیلی راحت تر از اینه :read:
          الان مگه شما سختی ای درون این دیدید ؟ :biggrin:

          بسلامت! برید سراغ PIC
          برای کاری در حوزه اربعین نیاز به نیروی داوطلب هستیم.
          http://hosseinwalkingday.com

          دیدگاه


            #6
            پاسخ : usb به روایت دیگر

            درود آقا مرتضی
            آقا عالی بود ... :applause:
            البته هنوز امتحانش نکردم !!!
            نوشته اصلی توسط MReza.p
            AVR CDC یک رابط نرم افزاری برای تبدیل USB به RS232 و TTL میکروهای AVR هست. که بر پایه ی VUSB خیلی وقت قبل کار شده. من نتونستم روی win8 ازش جواب بگیرم.
            این هم راه خیلی خوبیه که میتونیم یک مبدل بسیار ارزانتر از FT232 بسازیم ...
            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
            معرفی نرم افزار Codewizard PWM
            با من بیشتر آشنا شوید

            دیدگاه


              #7
              پاسخ : usb به روایت دیگر

              نوشته اصلی توسط MortezaMir نمایش پست ها
              با HID Generic هم می شه اما هنوز تست نگرفتم.
              سلام و تشکر.
              من مثال کدویژن در مورد HID Generic را کامپایل و در یک میکروی AT90USB162 (هدر برد فروشگاه) پروگرام کردم. یک نرم افزار هم برای تست ، در کنار مثال کدویژن وجود دارد که آن را اجرا کردم. میکرو داده را بدون مشکل ارسال می کند و در نرم افزار نمایش داده می شود. ولی وقتی از نرم افزار به میکرو داده ارسال می شود، طاهرا توسط میکرو دریافت نمی شود و نرم افزار نیز هنگ می کند. لطفا اگر کسی تجربه ای در این مورد دارد راهنمایی بفرماید.
              ممنون

              دیدگاه

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