Ich möchte eine kleine USB Tastatur basteln und bin auf VUSB gestoßen. http://blog.petrockblock.com/2012/05/19/usb-keyboard-with-arduino-and-v-usb-library-an-example/ Ich habe das ganze so aufgebaut und auch die Software aufgespielt, allerdings funktioniert es nicht!! UND ICH WEIẞ NICHT WIESO Gibt es eine Möglichkeit das ganze auch ohne Dioden aufzubauen?? Ich bin mir nämlich nicht sicher, ob die Dioden, welche ich verwendet habe, auch Zener-Dioden sind! Bitte um Hilfe
> Ich habe das ganze so aufgebaut und auch die Software aufgespielt, > allerdings funktioniert es nicht!! Was ∗genau∗? > UND ICH WEIẞ NICHT WIESO Wär ja sonst langweilig.. Also heisst Debuggen für Dich :-) Also z.B. mal das Ossi dranhängen. Und die Betriebssystemmeldungen verfolgen (dmesg, /var/log/messages und /var/log/syslog regeln - da Du nichts anderweitiges schreibst geh ich mal davon aus dass Du vernünftigerweise auf einem linuxarigen System arbeitest). > Gibt es eine Möglichkeit das ganze auch ohne Dioden aufzubauen?? Ja, aber.. > Ich bin mir nämlich nicht sicher, ob die Dioden, welche ich verwendet > habe, auch Zener-Dioden sind! ..bei einer starren Plattform wie dem Arduino ist es wesentlich einfacher die passenden Zenerdioden zu beschaffen. Auf dem Brotbrett wärs andersrum.
Den Vorgang nennt man Debuggen. Man teilt das große Programm in kleine auf, und analysiert was geht und was nicht. In deinem Fall: funktioniert die Eingabe mit dem Knopf. Funktioniert das Senden auf dem USB-Board. Der Arduino hat ja noch die eigene USB-Schnittstelle. Da kann man dann z.B. Debug-Meldungen mit printf ausgeben, was das Programm so tut. An dem Ausgang kommt man nur mit einem Oszilloskop weiter. Achja, wenn man dann als Gegenseite Linux einsetzt, dann kann man über Wireshark auch die ankommenden USB-Pakete analysieren. Eigentlich hast du es gut: so viel zu tun, da ist der Sonntag gerettet.
Roman Brock schrieb: > Ich bin mir nämlich nicht sicher, ob die Dioden, welche ich verwendet > habe, auch Zener-Dioden sind! Dann miß es doch einfach nach. Lege eine Spannung von 10V o.ä über einen Vorwiderstand von z.B. 10kΩ an die Diode an und bestimme mit einem Voltmeter die Spannung über der Diode.
Mein neuer Code.
1 | #include "UsbKeyboard.h" |
2 | void setup() { |
3 | // button setup |
4 | // USB setup ----------------- |
5 | // Disable timer0 since it can mess with the USB timing. Note that |
6 | // this means some functions such as delay() will no longer work. |
7 | TIMSK0 &= !(1<TOIE0); |
8 | // Clear interrupts while performing time-critical operations |
9 | cli(); |
10 | |
11 | // Force re-enumeration so the host will detect us |
12 | usbDeviceDisconnect(); |
13 | delayMs(250); |
14 | usbDeviceConnect(); |
15 | Serial.begin(9600); |
16 | // Set interrupts again |
17 | sei(); |
18 | } |
19 | |
20 | void loop() { |
21 | // update USB device state |
22 | UsbKeyboard.update(); |
23 | UsbKeyboard.sendKeyStroke(KEY_A); // if so, send the letter 'a' via USB keyboard |
24 | Serial.println("A sent!"); |
25 | delay(1000); // simple de-bouncing |
26 | |
27 | } |
28 | |
29 | // helper method for V-USB library |
30 | void delayMs(unsigned int ms) { |
31 | for( int i=0; i<ms; i++ ) { |
32 | delayMicroseconds(1000); |
33 | } |
34 | } |
Die Serial-Ausgabe kommt nicht. ausgabe von dmesg nach dem Anschließen:
1 | [11086.293284] usb 2-1.2: new low-speed USB device number 43 using ehci-pci |
2 | [11086.365204] usb 2-1.2: device descriptor read/64, error -32 |
3 | [11086.541009] usb 2-1.2: device descriptor read/64, error -32 |
4 | [11086.716816] usb 2-1.2: new low-speed USB device number 44 using ehci-pci |
5 | [11086.788681] usb 2-1.2: device descriptor read/64, error -32 |
6 | [11086.964540] usb 2-1.2: device descriptor read/64, error -32 |
7 | [11087.140347] usb 2-1.2: new low-speed USB device number 45 using ehci-pci |
Ich werde aber aus diesen Ausgaben nicht schlau! Ein Osszilloskop hab ich leider nicht! Wie würde das ganze ohne Dioden funktionieren?
>>new low-speed USB device number 43 using ehci-pci >>[11086.365204] usb 2-1.2: device descriptor read/64, error -32 Wenn ein Pc ein neues Device entdeckt, dann versucht er die Device-Descriptoren einzulesen. Anscheinend gibt es dabei ein Problem. Da hilft nur Debuggen der Pakete, die ankommen, bzw gesendet werden. Also auch tief im Linux drin. Vielleicht solltest du erst mal die USB-Basic lernen, damit du weisst, was überhaupt passieren muss.
Einfach ist USB nicht, verglichen zu RS-232. Ich habe ein paar Bücher dazu, die liegen allerdings auf der Arbeit.
Roman Brock schrieb: > // Disable timer0 since it can mess with the USB timing. Note that > // this means some functions such as delay() will no longer work. > TIMSK0 &= !(1<TOIE0); > .... > delay(1000); Ohne worte
Roman Brock schrieb: > Gibt es eine Möglichkeit das ganze auch ohne Dioden aufzubauen?? Die ganzen USB-Basteleien mit älteren Arduino-Boards sind hinfällig, seit es Arduino-Boards mit dem 32U4 Controller gibt. Besorge Dir beispielsweise einen Arduino LEONARDO: http://arduino.cc/de/Main/ArduinoBoardLeonardo Siehe auch: http://arduino.cc/de/Reference/MouseKeyboard
Ich möchte das ganze dann wenn es funktioniert auf eine Platine löten und direkt mit einem ATMega 328p betrieben, somit wäre es schon notwendig.
Wie kann ich das Problem mit dem Device Descriptor lösen?? dmesg Ausgabe:
1 | [14949.384739] usb 2-1.2: new low-speed USB device number 52 using ehci-pci |
2 | [14949.456662] usb 2-1.2: device descriptor read/64, error -32 |
3 | [14949.632466] usb 2-1.2: device descriptor read/64, error -32 |
4 | [14949.808278] usb 2-1.2: new low-speed USB device number 53 using ehci-pci |
5 | [14949.880194] usb 2-1.2: device descriptor read/64, error -32 |
6 | [14950.055999] usb 2-1.2: device descriptor read/64, error -32 |
7 | [14950.231806] usb 2-1.2: new low-speed USB device number 54 using ehci-pci |
8 | [14950.639137] usb 2-1.2: device not accepting address 54, error -32 |
9 | [14950.711276] usb 2-1.2: new low-speed USB device number 55 using ehci-pci |
10 | [14951.118607] usb 2-1.2: device not accepting address 55, error -32 |
11 | [14951.118787] hub 2-1:1.0: unable to enumerate USB device on port 2 |
Vielleicht liegt es ja wirklich an meinen Dioden? Wie könnte man es ohne realisieren?
Wie viel Ampere brauchen die Daten Kontakte bei USB? Ich habe mir nämlich gedacht, dass ich einfach vor die Kontakte Widerstände setzte, allerdings muss ich für die Rechnung die benötigte Stromstärke wissen. Kann man das so machen??
Roman Brock schrieb: > Ich möchte das ganze dann wenn es funktioniert auf eine Platine löten > und direkt mit einem ATMega 328p betrieben, somit wäre es schon > notwendig. Wenn Dir ein Leonardo-Board zu groß ist, dann nimmst Du eben einen Arduino-Micro und lötest das Ding Huckepack auf Deine Platine: http://arduino.cc/de/Main/ArduinoBoardMicro Was Du da basteln und frickeln möchtest, nur um einen Atmega328 verwenden zu können, wenn Du stattdessen eine USB-Lösung mit einem Atmega32U4 fertig aus der Schublade nehmen kannst, ist mir völlig unbegreiflich.
Roman Brock schrieb: > Vielleicht liegt es ja wirklich an meinen Dioden? Der Wert der Diode steht auf dem Gehäuse : dort müßte 3v6 stehen. Die der schwarze Balken der Dioden darf übrigens nicht an Gnd sein. Verrate uns einfach mal die Bestellnummer deiner Diode. > Wie könnte man es ohne realisieren? Mit zwei Dioden in Reihe an Vcc, oder einem Regler auf 3,3 V. http://www.rn-wissen.de/index.php/V-USB:_Ein_Firmware_USB-Treiber_f%C3%BCr_AVR
Hallo Roman Brock... ...seh dir ggf. mal http://matrixstorm.com/avr/tinyusbboard/ an. Du kannst die Zenerdioden weglassen, wenn du deine Gesamte Schaltung auf 3.3V (statt 5V) auslegst. In der Sprache der offiziellen VUSB Wiki (http://vusb.wikidot.com/hardware) also Solution A statt Solution B (bisher) nehmen. Beachte aber, das du dann einen Spannungsregler von 5 auf 3.3V benoetigst oder eine vom USB separate Quelle. Roman Brock schrieb: > [11086.788681] usb 2-1.2: device descriptor read/64, error -32 > [11086.964540] usb 2-1.2: device descriptor read/64, error -32 > [11087.140347] usb 2-1.2: new low-speed USB device number 45 using > ehci-pci Kann sein das deine usbconfig.h nicht stimmt, die PINs nicht richtig verbunden sind (USB D+ / USB D- vertauscht?) und/oder einfach nur der falsche Takt beim uebersetzten ausgewaehlt war. VUSB funktioniert nur mit ausgewaehlten Taktfrequenzen >= 12MHz. MfG Stephan
Ok nochmal, Beseitige mal den von mir oben angedeuteten Fehler. Vielleicht liegt es ja daran. Du darfst delay laut deinem Kommentar doch gar nicht verwenden
Der delay() Aufruf wird einfach nicht zurückkehren. Das ist hier aber egal, die USB Enumeration wird von vusb im Interrupt durchgeführt. Du hast vermutlich normale Dioden eingesetzt. Gängiger Pfusch ist es, diese Dioden einfach ganz wegzulassen. Erhöhe eventuell die Serienwiderstände etwas (100 Ohm), schalt noch ne Diode in die Vcc Leitung des Controllers und eventuell nen billigen Hub dazwischen, um die Anschlüsse im PC zu schützen. Da sollte dann nichts passieren (ohne Garantie!), denn die verbleibenden 4-8 mA sollten die Clamp-Dioden im USB-Hub/Controller schaffen.
Roman Brock schrieb: > Vielleicht liegt es ja wirklich an meinen Dioden? Welches Ergebnis brachte denn die Überprüfung selbiger?
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.