LUFA Einsteiger: Demo VirtualSerial funktioniert nicht

OP #2483683
Lesenswert?

Hi !

Ich würde gerne LUFA verwenden, habe aber einige Startprobleme.
Mein Setup:
AVRStudio 4 auf WINXP
at90usb1287 auf selbst entworfenem pcb

Wenn ich die VirtualSerial aus den Demos kompiliere und aufspiele sagt
WinXP nur "Gerät nicht erkannt". Den im Verzeichnis liegenden Treiber
.inf akzeptiert WinXp nicht dafür.
Alles was ich verändert habe (LUFA111009) ist in der makefile:
MCU = at90usb1287
BOARD = NONE
F_CPU = 16000000

Ich verwende ein eigenes Board (s. Schaltplan), daher das "NONE". Aber
als serielle Schnittstelle müsste es doch dennoch von XP erkannt werden,
oder?

Auch mit dem originalen makefile, also board=usbkey, f_cpu=8000000 hatte 
ich kein Glück.

Die Schaltung an sich scheint ok zu sein, da sie mit der firmware von 
Stefan Salewski als USB-Gerät ordnungsgemäß erkannt wird und läuft 
(http://www.ssalewski.de/AT90USB_firmware.html.de).

Hat irgendwer Erfahrung damit?

Danke, David
#2483761
Lesenswert?

Ich seh grad du hast schon bei AVR Freaks gepostet - hast du da vorher 
auch die Suche benutzt?
Mir hat das geholfen:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=114164&highlight=lufa

Mit dem Treiber musst du mal da im Forum weiter suchen, bin mir sicher 
das da noch ein paar mehr leute Uralte Betriebssysteme nutzen 
(FLAMEWAR!!)


Außerdem hast du garkein Bild angehangen.
OP #2483767
Lesenswert?

Hi !
Danke für die rasche Antwort!
ja, bei avrfreaks habe ich auch gesucht, habe den von Dir verlinkten 
Eintrag aber wohl nicht gründlich genug gelesen, ich hatte das erst so 
verstanden dass sich das nur wuf win7 bezieht...mein Fehler.

Ich probiers mal mit dem dort beschriebenen Patch.
OP #2483784
Lesenswert?

Ich habe die LUFA wie beschrieben geändert, ohne Effekt...trotzdem danke 
für den Hinweis!
Der dort beschriebene Bug trat ja auch erst auf nachdem eine Verbindung 
mit dem PC hergestellt wurde. Bei mir kommt es ja gar nicht dazu :(

Hast Du noch weitere Ideen?

VG David
#2483807
Lesenswert?

Bei mir hat Win7 den treiber ohne Probleme geschluckt.
Was kommt denn genau für eine Meldung? Mach einfach mal Rechtsklick -> 
Installieren auf die .inf

Fuses richtig? Richtiger Quarz? Weil aus diesem Berechnet sich ja die 
USB Frequenz - wenn du 8Mhz sagst, du aber einen 16Mhz Quarz hast, kanns 
halt nicht funktionieren da der PLL dann anders eingestellt wird durch 
die Lib (PLL ist für die USB Frequenz verantwortlich)
OP #2483824
Lesenswert?

Hier erstmal die versprochenen Bilder zum Schaltplan und den Fuses.
Ich würde denken dass die Fuses richtig gesetzt sind, oder? Draußen 
hängt ein 16MHz Quarz dran.

Ich suche mir mal einen Win7 Rechner und hängs da dran ;)

Unter Linux meldet dmesg beim einstecken:
1
[ 1036.216359] usb 1-2.4: new full speed USB device using ehci_hcd and address 9
2
[ 1036.288341] usb 1-2.4: device descriptor read/64, error -32
3
[ 1036.464310] usb 1-2.4: device descriptor read/64, error -32
4
[ 1036.640153] usb 1-2.4: new full speed USB device using ehci_hcd and address 10
5
[ 1036.712136] usb 1-2.4: device descriptor read/64, error -32
6
[ 1036.888101] usb 1-2.4: device descriptor read/64, error -32
7
[ 1037.064190] usb 1-2.4: new full speed USB device using ehci_hcd and address 11
8
[ 1037.472273] usb 1-2.4: device not accepting address 11, error -32
9
[ 1037.544353] usb 1-2.4: new full speed USB device using ehci_hcd and address 12
10
[ 1037.952266] usb 1-2.4: device not accepting address 12, error -32
11
[ 1037.952411] hub 1-2:1.0: unable to enumerate USB device on port 4



Danke für die Tips!
Angehängte Dateien:
#2483937
Lesenswert?

Auf deinem Schaltplan solltest du immer BEIDE Enden beschriften und das 
Bus System zusammen legen.

Schalt einfach mal so aus spaß den HWBE (Bootloader) aus.

Sonst währ ich jetzt auch am Ende mit meinem Latein. Bei mir lags halt 
eher an µC und nicht am PC, der Treiber lief problemlos.
Gast #2484761
Lesenswert?

Nochmal: Rechtsknick auf die .Inf Datei im Demo VirualSerial Ordner und 
dann installieren anklicken. Und GENAU das machen, nicht über 
gerätemanager.
So kann man Schonmal Treiber Problem ausschließen.
OP #2484880
Lesenswert?

Ich hab's gefunden:

Ich habe in AVR-Studio immer auf "Build" geklickt. Nachdem ich im Menü 
"Build->Rebuild all" gewählt und die neue .hex aufgespielt habe, wurde 
das USB-Serialgerät erkannt :) :) :)

Mein Fehler, ich glaube sowas ähnliches habe ich sogar irgendwo schonmal 
gelesen batsch

Vielen Dank für Deine Hilfe und raschen Kommentare, das hat mir sehr 
geholfen!!! :)
Gast #2485038
Lesenswert?

Kein Problem.
Und dank dem Patch im Link von oben kannst den Port sogar öffnen ;)
Das war mein Problem: Erkannt wurde alles, Treiber ok, aber öffnen konnt 
ich den Port nicht, kam immer ein Timeout.
OP #2485052
Lesenswert?

Ich habe schon das nächste Problem:

Ich möchte Zeichen über ein terminal (putty) als echo zurück geben. Im 
Netz finden sich einige solcher Programme, die im wesentlichen so 
aussehen:
1
int main(void)
2
{
3
  SetupHardware();
4

5
  /* Create a regular character stream for the interface so that it can be used with the stdio.h functions */
6
  CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream);
7

8
  //LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
9
  sei();
10

11
  for (;;)
12
  {
13
    //CheckJoystickMovement();
14
      
15
    /* Must throw away unused bytes from the host, or it will lock up while waiting for the device */
16
    int8_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); 
17
    int8_t length=CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface);
18
    if(length>0)
19
      CDC_Device_SendByte(&VirtualSerial_CDC_Interface, ReceivedByte); 
20

21
    CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
22
    USB_USBTask();
23

24
    
25
  }
26
}

Ich bekomme da aber immer nur "ÿ" zurück. Wenn ich dagegen einen festen 
String sende kommt der richtig an:
1
void sendstring(void){
2
  char*       ReportString  = NULL;
3
  ReportString = "Cheers! :)\r\n";
4
  fputs(ReportString, &USBSerialStream);
5
}

Hast Du eine Idee was ich hier falsch mache?
OP #2485138
Lesenswert?

Ich seh grade:
Die Funktionsdefinitionen haben sich verändert (den Code oben habe ich 
aus einem alten Forumseintrag abgeschrieben).
In der aktuellen Version (111009) muss es lauten:
uint16_t CDC_Device_BytesReceived()
int16_t CDC_Device_ReceiveByte()

s.d. folgender Code funktinoiert:
1
int main(void)
2
{
3
  SetupHardware();
4

5
  /* Create a regular character stream for the interface so that it can be used with the stdio.h functions */
6
  CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream);
7

8
  //LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
9
  sei();
10

11
  for (;;)
12
  {
13
    //CheckJoystickMovement();
14
    
15
    uint16_t len=CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface);
16
    int16_t byte_received;
17
    /* Must throw away unused bytes from the host, or it will lock up while waiting for the device */
18
    for(int counter=0;counter<=len;counter++){
19
      byte_received=CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); 
20
      if(byte_received>=0) CDC_Device_SendByte(&VirtualSerial_CDC_Interface, byte_received); 
21
      }
22

23
    CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
24
    USB_USBTask();
25

26
  
27

28
     
29

30
    
31
  }
32
}

:)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren