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
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.
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.
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
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)
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!
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.
OK, danke. Ich hab's grad nochmal an einem Win7 Rechner probiert, gleiches Ergebnis.
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?)
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.
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.
OK, habe ich gemacht. Das ergab leider keine Änderung.
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!!! :)
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.
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?
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 | } |
:)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.

