-         

Ergebnis 1 bis 3 von 3

Thema: AVR Hardware USB

  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von MisterMou
    Registriert seit
    31.05.2009
    Ort
    Stralsund
    Alter
    26
    Beiträge
    433

    AVR Hardware USB, Setup Paket wird nicht empfangen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Halli Hallo,

    zur Zeit bastel ich daran, mit einem mega16U4 eine USB Maus zum Laufen zu bekommen. Als Taktquelle dient ein 16MHz Quarz.
    Ich bin einfach ratlos warum das Ding zickt. Nachdem ich mir schon ein paar Nächte um die Ohren geschlagen habe, hoffe ich auf Eure Hilfe.

    Zum Hintergrund, ich habe das Beispiel von Atmel durchgearbeitet und meiner Meinung nach auch verstanden.

    Beispiel:
    http://www.atmel.com/images/AVR270_USB_mouse.zip

    Die ganze Schedulergeschichte habe ich erstmal weggelassen. Erstmal soll der Spaß laufen.
    Das Problem ist, dass das RXSTPI Flag nicht gesetzt wird.
    Zum Überprüfen lass ich mir einen kurzen Peak ausgeben, der mit einem Logicanalyzer überwacht wird. Parallel dazu wird die USB Übertragung erfasst.
    Im Moment wird gepollt. Also erstmal ganz dumpf mit dem Knüppel auf den Kopf.

    Das sieht dann so aus:


    Natürlich kommt es momentan erstmal zu einem Fehler im Rechner, weil der Controller noch nicht antwortet, das ist mir bewusst.

    Zuletzt gibt es noch den Code, den ich auf das Wesentlichste reduziert habe.
    Die Reihenfolge der Initialisierung habe ich aus dem Beispiel übernommen.

    Es wäre echt der Knaller, wenn sich jemand meldet der die eine geniale Idee hat.

    Code:
    Code:
    int main(void)
    {    
        usb_start();
        
        while(1)
        {
            if(Is_usb_receive_setup())
             {
                 Led_on();    //for debugging
                 Led_off();        
             }
        }
    }
    
    void usb_start(void)
    {
        Usb_enable_regulator();
        Usb_disable_interface();
        Usb_enable_interface();
        Usb_select_low_speed();    
        Usb_enable_vbus_pad();
        
        Usb_disable_clock();
        usb_start_PLL();
        Usb_enable_clock();
        Usb_attach();
        
        usb_config_ep(0, USB_CONF1_EP0_0, USB_CONF1_EP0_1);    //config control EP
    }
    
    void usb_start_PLL(void)
    {
         PLLFRQ &= ~(1<<PINMUX);        //use CPU clock
         PLLFRQ |= 0x04|(1<<PLLUSB);    //96MHz / 2
         PLLCSR |= (1<<PINDIV);        //PLL clock prescaler = 2
         PLLCSR |= (1<<PLLE);        //PLL enable
        
        while(!(PLLCSR & (1<<PLOCK)));    //wait for PLL is locked
    }
    
    U8 usb_config_ep(U8 epNum,U8 config0, U8 config1)
    {
        Usb_select_endpoint(epNum);
        Usb_enable_endpoint();
        UECFG0X = config0;
        UECFG1X = config1;
        Usb_allocate_memory();
        return (Is_endpoint_configured());
    }
    Defines:
    Code:
    #define USB_CONF1_EP0_0                0x00                        //control EP
    #define USB_CONF1_EP0_1                0x00                        //one bank, 8Byte buffer
        
    #define Usb_enable_interface()        (USBCON |= (1<<USBE))        //enable USB interface
    #define Usb_disable_interface()        (USBCON &= ~(1<<USBE))        //disable USB interface
    #define Usb_enable_regulator()        (UHWCON |= (1<<UVREGE))        //enable internal USB pads regulator
    #define Usb_enable_vbus_pad()        (USBCON |= (1<<OTGPADE))    //enable VBUS pad
    #define Usb_disable_clock()            (USBCON |= (1<<FRZCLK))        //disable clock
    #define Usb_enable_clock()            (USBCON &= ~(1<<FRZCLK))    //enable clock
    #define Usb_enable_vbus_pad()        (USBCON |= (1<<OTGPADE))    //enable VBUS pad
    
    #define Usb_select_low_speed()        (UDCON |= (1<<LSM))            //select Low-Speed Mode
    #define Usb_attach()                (UDCON &= ~(1<<DETACH))        //attach pullup resistor for speed selection
    
    #define Usb_select_endpoint(ep)        (UENUM = (U8)ep)            //selects the endpoint number to interface with the CPU
    #define Usb_enable_endpoint()        (UECONX|=(1<<EPEN))            //enables the current endpoint
    #define Usb_allocate_memory()        (UECFG1X |=  (1<<ALLOC))    //allocates the current configuration in DPRAM memory
    #define Is_endpoint_configured()    ((UESTA0X & (1<<CFGOK))?1:0)//tests if current endpoint is configured
    
    #define Is_usb_receive_setup()        (UEINTX&(1<<RXSTPI))        //tests if SETUP received
    Geändert von MisterMou (19.08.2014 um 15:00 Uhr)
    Mähh macht der Rasenmäher. http://moufx.wordpress.com/

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    41
    Beiträge
    398
    Wiso glaubst du ist der Scheduler im Beispiel? Ist der im Beispiel nur zur Verwirrung oder ist ist das Beispiel da um dir den Weg zu zeigen?

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von MisterMou
    Registriert seit
    31.05.2009
    Ort
    Stralsund
    Alter
    26
    Beiträge
    433
    Wozu der Scheduler da ist, ist mir durchaus bewusst.
    Für den aktuellen Stand des Programms tut er aber in keinster Weise Not.
    Generell braucht man für eine lumpige Maus keinen Scheduler, aber man kann

    Mir geht es nicht darum, den Code von Atmel zum laufen zu bringen, sondern ihn komplett zu verstehen. Dementsprechend wurde der relevante Code durchgearbeitet und in meinen Stil übernommen.

    Ich finde die Codes von Atmel immer sehr universell und dementsprechend umfangreich. Sie sind auch gerne mal: "Guck mal was alles mit unseren Controllern geht", vorallem aus Sicht eines Einsteigers.
    Geändert von MisterMou (20.08.2014 um 20:52 Uhr)
    Mähh macht der Rasenmäher. http://moufx.wordpress.com/

Ähnliche Themen

  1. Antworten: 14
    Letzter Beitrag: 30.04.2011, 14:41
  2. Unterscheiden zw. AVR-Studio Simulator und echter Hardware?
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 31.12.2009, 19:43
  3. Ein AVR (AT TINY) programmieren - einfachste hardware?
    Von Maverick89 im Forum AVR Hardwarethemen
    Antworten: 40
    Letzter Beitrag: 24.11.2007, 12:52
  4. Spezielle USB Hardware
    Von Killer im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 02.08.2007, 20:23
  5. AVRµC über USB und AVR-Studio! Geht das ? Hardware ?
    Von popi im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 13.10.2005, 18:32

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •