Arduino Uno und VUSB

OP #3376944
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
Gast #3376960
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.
Gast #3376962
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.
Gast #3376964
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.
OP #3377035
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?
Gast #3377044
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.
OP #3377164
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
#3377204
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.
Gast #3377250
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
#3377260
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
Gast #3377395
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.

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