Forum: Mikrocontroller und Digitale Elektronik USB-Trommel aus der Make wird am USB Port nicht erkannt


von Parceval D. (parceval_d)


Angehängte Dateien:

Lesenswert?

Sehr geehrtes Forum,

ich habe gerade erst angefangen mit AVR Mikrocontrollern zu 
experimentieren und ich wollte da zum start auch eine USB-Trommel die 
per midi funktioniert bauen. Die anleitung und alles andere was man 
braucht kahm von der MAKE zeitschrift 2/2017 und ich hab alles davon in 
den anhang gepackt.

Jetzt zu meinem problem damit: Ich habe die schaltung aufgelötet und 
habe den ATMega8 beschrieben aber als ich dann mit vorfreude das ganze 
an den PC angeschlossen habe erschin nur die fehlermeldung das das usb 
gerät nicht erkannt wurde und wenn ich im geräte manager nachgucke steht 
da fehlercode 43 und das der fehler bei der anforderung einer geräte 
beschreibung liegt.
Die ganzen tricks die man im Internet findet um diesen Fehler zu lösen 
funktionieren nicht und ich denke das es entweder ein problem bei den 
Z-Dioden und der ganzen USB verarbeitung ist oder ein problem bei der 
Software was aber eigentlich nicht sein kann da das bei MAKE 
funktioniert hat.

Hoffentlich könnt ihr mir helfen

Liebe Grüße und danke im vorraus :D

: Bearbeitet durch User
von pegel (Gast)


Lesenswert?

Hast Du die beiden Fuse auch gesetzt, oder nur einfach make ausgeführt?

von Thomas Z. (usbman)


Lesenswert?

Ich würde den Fehler erst mal bei einem fehlerhaften Aufbau vermuten. 
Dein Controller wird einfach nicht als UsbMidi Device erkannt. Such den 
Fehler in der Überbindung. Beliebt ist beispielsweise das Vertauschen 
der D+ und D- Leitung. Bild von deinem Aufbau wäre hilfreicher als die 
Seiten aus der Make.

von Adam P. (adamap)


Lesenswert?

Parceval D. schrieb:
> erschin nur die fehlermeldung das das usb
> gerät nicht erkannt wurde

Windows erkennt das da was verbunden wurde, aber kann mit dem Gerät 
nicht kommunizieren.

- Verbindung falsch?
- Läuft die Firmware überhaupt?

Denn wenn die Firmware nicht per USB antwortet, passiert der Fehler 
ebenfalls.

: Bearbeitet durch User
von Parceval D. (parceval_d)


Lesenswert?

Danke für die schnellen antworten und guten Ratschläge.


pegel schrieb:
> Hast Du die beiden Fuse auch gesetzt, oder nur einfach make ausgeführt?

Laut AVRDude sollen die Fuses funktionieren aber ich wüsste jetzt nicht 
wie ich die setzen sollte.

Thomas Z. schrieb:
> Beliebt ist beispielsweise das Vertauschen
> der D+ und D- Leitung.

Ich habe die schaltung noch mal auf einem Steckboar aufgebaut mit einem 
anderen ATMega8 und hab dort mal versucht ob das mit dem wechsel von D- 
und D+ funktioniert aber auch wieder der gleiche Fehler.

Thomas Z. schrieb:
> Bild von deinem Aufbau wäre hilfreicher

kann ich machen aber wie ich obern schon geschrieben habe hatte ich das 
auch noch mal auf nem steckboard ausprobiert und das war da genauso.
Soll ich trotzdem eins schicken?

Adam P. schrieb:
> - Läuft die Firmware überhaupt?

Die sollte laufen. Wenn die nicht läuft dann erkennt Windows nichts.

von Adam P. (adamap)


Lesenswert?

pegel schrieb:
> Hast Du die beiden Fuse auch gesetzt, oder nur einfach make ausgeführt?

Parceval D. schrieb:
> Laut AVRDude sollen die Fuses funktionieren aber ich wüsste jetzt nicht
> wie ich die setzen sollte.

Kann es sein, dass du in dem Makefile in Zeile 11 / 12 die Fuses selbst 
erstmal hinterlegen musst.

Da steht "# see below for fuse values for particular devices".

Also dann müsste man das doch z.B. für den Atmega8 anpassen:
1
...
2
DEVICE  = atmega8
3
F_CPU   = 12000000  # in Hz
4
FUSE_L  = 0x9F
5
FUSE_H  = 0xC9
6
AVRDUDE = avrdude -c avrisp2 -p $(DEVICE) # edit this line for your programmer
7
...

Ja ist so, siehe Zeile 116:
"*** Edit Makefile and choose values for FUSE_L and FUSE_H!"

Oder hast du das bereits gemacht?
Denn sonst beendet er mit "exit 1" und flasht die Firmware auch nicht,
falls du "make program" verwendet hast.

: Bearbeitet durch User
von Martin H. (horo)


Lesenswert?

Diese Z-Dioden bringen immer wieder Verdruss, ich habe stets bessere 
Resultate  erzielt, wenn man die AVR-Betriebsspannung auf 3.3 Volt 
reduziert, entweder mit zwei Dioden oder einer roten LED wie bei 
obdev.at gezeigt:
https://www.obdev.at/Images/vusb/circuit-zoomed.gif
(das geht auch mit 16 MHz bei den 20 MHz-Bausteinen, siehe den Link auf 
forums.obdev.at)

Ausführliche Diskussion zu V-USB-MIDI dort:
https://forums.obdev.at/viewtopic.php?f=8&t=1352

Du könntest auch meine dort beschriebene Variante V-USB-MIDI-ATtiny85 
probieren, die läuft out-of-the-box und dann durch Vergleich der Signale 
den Fehler eingrenzen.

Martin

von Parceval D. (parceval_d)


Lesenswert?

Adam P. schrieb:
> Kann es sein, dass du in dem Makefile in Zeile 11 / 12 die Fuses selbst
> erstmal hinterlegen musst.

Das hab ich nicht gemacht.. ich hab noch nicht mal mitbekommen das das 
fehlt...
Das probiere ich sofort aus :D


Martin H. schrieb:
> Diese Z-Dioden bringen immer wieder Verdruss, ich habe stets bessere
> Resultate  erzielt, wenn man die AVR-Betriebsspannung auf 3.3 Volt
> reduziert, entweder mit zwei Dioden oder einer roten LED wie bei
> obdev.at gezeigt:

Sobald das ganze funktioniert werde ich das auch ausprobieren aber 
erstmal will ich das so wie in der Anleitung machen damit ich nicht auch 
noch da einen Fehler reinbringe. Danke für den Tipp

von Parceval D. (parceval_d)


Lesenswert?

Ich bin mir gerade nicht ganz sicher ob ich das jetzt richtig verstanden 
habe.
Ich hatte main.hex einfach auf den AtMega8 geschrieben und dachte das 
wär alles. Ist die Datei nicht schon von MAKE fertig zum aufspielen 
gemacht worden oder muss ich mit dem Make file arbeiten?
Und wenn ich mit dem arbeiten muss, was muss ich dann alles machen und 
soll ich das mit den fuses im make file oder im main.c file verändern?

von Adam P. (adamap)


Lesenswert?

Wie hast du die main.hex aufgespielt?
Hast du das über Konsole mit avrdude gemacht, oder wie kam die *.hex in 
den Flash vom Atmega?

Die Fuses muss man zusätzlich einstellen.
Der AVR kommen mit einer default Config. aus der Produktion und dann 
muss man die Fuses so einstellen wie man es halt benötigt.

: Bearbeitet durch User
von Parceval D. (parceval_d)


Lesenswert?

Ich habe jetzt herrausgefunden wie es geht:

mit diesen Befehlen:

avrdude -P COM3 -b 19200 -c avrisp -p m8 -u -U hfuse:w:0xC9:m -U 
lfuse:w:0x9F:m

avrdude -P COM3 -b 19200 -c avrisp -p m8 -u -U 
flash:w:"d:\avr\main.cpp.hex":i

und jetzt wird es auch erkannt :D
Blöderweise nur solange der Programmer (ArduinoUNO) mit allen kabeln 
angeschlossen ist, der muss aber nicht selber noch per USB angeschlossen 
sein.

Trotzdem erstmal vielen vielen dank an euch alle und besonders an adamap 
für die Lösung.

von Thomas Z. (usbman)


Lesenswert?

Das ist doch ein VUSB Design oder? Falls ja das geht nicht mehr. Übliche 
Betriebssysteme lehnen es inzwischen ab lowspeed devices mit Bulk EPs zu 
enumerieren. Da braucht du ein altes OS z.b WinXp. Seit W7 oder W8 
werden diese Art devices nicht mehr enumeriert, da nicht Spec konform.

von c-hater (Gast)


Lesenswert?

Parceval D. schrieb:

> Ich hatte main.hex einfach auf den AtMega8 geschrieben und dachte das
> wär alles.

Nein, ist es nicht. Das Hexfile enthält nur das Programm, aber nicht die 
Fuses.

Theoretisch wäre es zwar möglich, in einem Hexfile auch die Fuses mit 
unterzubringen, aber es gibt dafür keinen irgendwie gearteten Standard, 
deswegen wird es nicht gemacht.

Also: du musst die Fuses manuell passend setzen, wenn du nicht den 
gesamten Prozess (Programmerstellung und Programmieren des Targets) über 
das makefile abhandelst.

Zum Programmieren der Fuses benötigst du einen ISP-Programmer. Das geht 
nicht über einen Bootloader.

von Parceval D. (parceval_d)


Lesenswert?

Thomas Z. schrieb:
> Das ist doch ein VUSB Design oder? Falls ja das geht nicht mehr. Übliche
> Betriebssysteme lehnen es inzwischen ab lowspeed devices mit Bulk EPs zu
> enumerieren. Da braucht du ein altes OS z.b WinXp. Seit W7 oder W8
> werden diese Art devices nicht mehr enumeriert, da nicht Spec konform.

Ich hab es jetzt um 2 Kondensatoren erweitert dadurch funktioniert es 
jatzt auch unter windows 10.
Also funktionieren ist etwas hoch gegriffen aber es wird zumindest 
erkannt und auch richtig als eDrum ausgelesen. Das einzige was jetzt 
noch fehlt ist das es auch von midi fähiger software verwendet wird. 
Unter lmms kann man es hinzufügen jedoch kommt kein signal an wenn man 
das pizo element bewegt/klopft.

c-hater schrieb:
> Nein, ist es nicht. Das Hexfile enthält nur das Programm, aber nicht die
> Fuses.

das hab ich jetzt auch herrausgefunden :)

Parceval D. schrieb:
> avrdude -P COM3 -b 19200 -c avrisp -p m8 -u -U hfuse:w:0xC9:m -U
> lfuse:w:0x9F:m

hiermit hab ich die fehlerfrei schreiben können und es geht auch mit dem 
Arduino UNO


wie oben geschrieben ist jetzt das einzige was nicht funktioniert das in 
lmms das signal registriert wird und ich weiß nicht wie ich das sonst 
noch ausprobieren könnt wenn nicht mit lmms.

von Martin H. (horo)


Lesenswert?

Parceval D. schrieb:
> Ich hab es jetzt um 2 Kondensatoren erweitert dadurch funktioniert es
> jatzt auch unter windows 10.

Die haben bestimmt auch einen Wert und sind auch sicherlich irgendwo 
angeschlossen :)

von Parceval D. (parceval_d)


Angehängte Dateien:

Lesenswert?

Martin H. schrieb:
> Die haben bestimmt auch einen Wert und sind auch sicherlich irgendwo
> angeschlossen :)

ja natürlich xD
einen 100uF und einen 22uF direkt an + und -
und siehe da es funktioniert :D

Ich hab jetzt auch herrausgefunden warum kein Signal ankommt nur weiß 
ich nicht wie ich es lösen soll.
Am Ausgang des MCP6002 (pin7) soll die Hüllkurve raus kommen und die 
soll sich im bereich von 2,5v-5v bewegen. jedoch nach dem Oszyloskop zu 
urteilen stimmt das da schon nicht, weil sich die Hüllkurve genau in die 
andere richtung bewegt also zwischen 2,5v-0v. Ich habe die Schaltung 
schon viele male (auch in den vergangenen Tagne) kontrolliert und kann 
ausschließen das es falsch angeschlossen ist oder falsch/kalt gelötet. 
An allen anderen stellen vor der letzten instanz ist alles richtig also 
das Audiosignal und das Gleichgerichtete Audiosignal sind richtig und 
ziehmlich genauso wie auf den Bildern.

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

Parceval D. schrieb:
> Das einzige was jetzt noch fehlt ist das es auch von midi fähiger
> software verwendet wird. Unter lmms kann man es hinzufügen jedoch kommt
> kein signal an wenn man das pizo element bewegt/klopft.

Wie gesagt soweit mir bekannt ist funktioniert das nicht mehr. UsbMidi 
braucht Bulk EPs diese sind für lowspeed Devices nicht erlaubt. Das hat 
lange Zeit trotzdem funktioniert, aktuelle Linux und Win Versionen 
sperren sich inzwischen solche Devices zu erlauben

von Martin H. (horo)


Lesenswert?

Parceval D. schrieb:
> weil sich die Hüllkurve genau in die
> andere richtung bewegt also zwischen 2,5v-0v

Wenn Du auf 
https://www.mikrocontroller.net/attachment/466450/USB-Trommel_3.jpg 
schaust, dann geht der positive Ausgang des Brückengleichrichters an den 
invertierenden Eingang von U1B, der das Signal dreht - wenn Du die 
Ausgänge der Brücke tauschst, sollte es richtig rum sein.

von Parceval D. (parceval_d)


Lesenswert?

Thomas Z. schrieb:
> Wie gesagt soweit mir bekannt ist funktioniert das nicht mehr. UsbMidi
> braucht Bulk EPs diese sind für lowspeed Devices nicht erlaubt. Das hat
> lange Zeit trotzdem funktioniert, aktuelle Linux und Win Versionen
> sperren sich inzwischen solche Devices zu erlauben

Achso, das ist ja Blöd :(
dann probiere ich das noch mal an einem alten win7 rechner

Martin H. schrieb:
> Wenn Du auf
> https://www.mikrocontroller.net/attachment/466450/USB-Trommel_3.jpg
> schaust, dann geht der positive Ausgang des Brückengleichrichters an den
> invertierenden Eingang von U1B, der das Signal dreht - wenn Du die
> Ausgänge der Brücke tauschst, sollte es richtig rum sein.

Das war auch mein Gedanke, wuste aber niht ob das wirklich so hinhaut.
Ich werde das schnellst möglich ausprobieren.

von Martin H. (horo)


Lesenswert?

Thomas Z. schrieb:
> UsbMidi braucht Bulk EPs diese sind für lowspeed Devices nicht erlaubt.
> Das hat lange Zeit trotzdem funktioniert, aktuelle Linux und Win Versionen
> sperren sich inzwischen solche Devices zu erlauben

Wie aktuell muss Linux sein, damit es nicht mehr funktioniert? Ein 
aktuelles Debian Stable (Kernel-Version 4.19.0-9-amd64) akzeptiert mein 
ATtiny-Board mit V-USB-MIDI, das alle 2 ms zwei Midi-Komandos sendet, 
ohne Probleme.

von Parceval D. (parceval_d)


Lesenswert?

Ich habe jetzt alle Dioden umgedreht und es funktioniert :D
Vielen lieben danke an alle. Und übrigends funktioniert es auch an Win10 
;). Den Tipp von Matin werde ich auch noch ausprobieren in einem 
weiteren modell davon.

Martin H. schrieb:
> Diese Z-Dioden bringen immer wieder Verdruss, ich habe stets bessere
> Resultate  erzielt, wenn man die AVR-Betriebsspannung auf 3.3 Volt
> reduziert, entweder mit zwei Dioden oder einer roten LED wie bei
> obdev.at gezeigt:
> https://www.obdev.at/Images/vusb/circuit-zoomed.gif
> (das geht auch mit 16 MHz bei den 20 MHz-Bausteinen, siehe den Link auf
> forums.obdev.at)
>
> Ausführliche Diskussion zu V-USB-MIDI dort:
> https://forums.obdev.at/viewtopic.php?f=8&t=1352
>
> Du könntest auch meine dort beschriebene Variante V-USB-MIDI-ATtiny85
> probieren, die läuft out-of-the-box und dann durch Vergleich der Signale
> den Fehler eingrenzen.
>
> Martin

Und in dem Modell werde ich auch noch mal versuchen mich in den Code 
einzuarbeiten um mehr als nur eine trommel daran zu haben da ja viele 
Pins am m8 unbelegt sind und ich nicht tausende von den teilen bauen 
will um eine art schlagzeug zu haben.

Aber erstmal nochmals vielen vielen dank an euch.

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.