Forum: Mikrocontroller und Digitale Elektronik LUFA Einsteiger: Demo VirtualSerial funktioniert nicht


von David H. (batboy)


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

von Martin K. (dschadu)


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.

von David H. (batboy)


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.

von David H. (batboy)


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

von Martin K. (dschadu)


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)

von David H. (batboy)


Angehängte Dateien:

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!

von Martin K. (dschadu)


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.

von David H. (batboy)


Lesenswert?

OK, danke.

Ich hab's grad nochmal an einem Win7 Rechner probiert, gleiches 
Ergebnis.

von Martin K. (dschadu)


Lesenswert?

Was heißt gleiches Ergebnis?
Treiber lässt sich nicht Installieren oder was?
Wie gesagt, mach mal Rechtsklick auf die .inf datei und dann 
Installieren.
Meckert Win jetzt rum? (XP und Win7?)

von David H. (batboy)


Lesenswert?

Unter Win7 wie unter XP: Beim einstecken kommt "Gerät wurde nicht 
erkannt". Treiber lässt sich für das Gerät nicht nachträglich über den 
Gerätemanager installieren: "Ordner enthält keinen passenden Treiber" 
war sinngemäß die Aussage.

von Martin K. (Gast)


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.

von David H. (batboy)


Lesenswert?

OK, habe ich gemacht. Das ergab leider keine Änderung.

von David H. (batboy)


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!!! :)

von Martin K. (Gast)


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.

von David H. (batboy)


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?

von David H. (batboy)


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
}

:)

von Martin K. (dschadu)


Lesenswert?

fputc und fgetc etc aus der normalen AVR Lib funktionieren auch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.