Forum: Mikrocontroller und Digitale Elektronik Arduino Uno und VUSB


von R. B. (dxx255)


Lesenswert?

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

von g457 (Gast)


Lesenswert?

> 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.

von PittyJ (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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.

von R. B. (dxx255)


Lesenswert?

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?

von PittyJ (Gast)


Lesenswert?

>>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.

von R. B. (dxx255)


Lesenswert?

Gibt es dazu ein einfaches und verständliches Tutorial im Netz??

von PittyJ (Gast)


Lesenswert?

Einfach ist USB nicht, verglichen zu RS-232.
Ich habe ein paar Bücher dazu, die liegen allerdings auf der Arbeit.

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

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

von Jürgen S. (jurs)


Lesenswert?

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

von R. B. (dxx255)


Lesenswert?

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.

von R. B. (dxx255)


Lesenswert?

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

von R. B. (dxx255)


Lesenswert?

Vielleicht liegt es ja wirklich an meinen Dioden?
Wie könnte man es ohne realisieren?

von lol (Gast)


Lesenswert?

FT232R

von R. B. (dxx255)


Lesenswert?

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??

von Jürgen S. (jurs)


Lesenswert?

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.

von 1.3W (Gast)


Lesenswert?

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

von Stephan B. (matrixstorm)


Lesenswert?

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

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

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

von Matthias Larisch (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.