Forum: Mikrocontroller und Digitale Elektronik USB Maus mit USART auslesen


von Bruno M. (brumay)


Lesenswert?

Hallo,

dieses Thema kommt ja in Variationen immer wieder, aber etwas passendes 
habe ich nicht gefunden.

Ich hatte mir vorgestellt, ich könnte mit einem ATMega162 (zwei USARTS) 
und zwei USB-USART Wandlern die USB Signale einer Maus im PC sichtbar 
machen. Leider funktioniert das aber nicht. Wo liegt das Problem?

Wenn ich beide Wandler an den PC anschließe, können die beiden USARTs 
kommunizieren, aber mit der Maus kommt gar nichts.

von Peter II (Gast)


Lesenswert?

Bruno M. schrieb:
> aber mit der Maus kommt gar nichts.

weil eine USB-Maus keine Serielles Device ist sondern ein HID.

Wenn überhaupt brauchst du eine alte Serielle oder PS2 Maus.

von Kirsch (Gast)


Lesenswert?

Es gibt USB-Mäuse die erkennen ob sie per USB oder per PS2 angeschlossen 
sind, diese liegen meist auch ein USB auf PS2 Adapter bei.

Man darf also nicht blind davon ausgehen das jede Maus die 
Fallback-Fähigkeit hat.

von H.Joachim S. (crazyhorse)


Lesenswert?

Naja, aber auch mit PS/2 kann man die nicht an eine RS232 anschliessen. 
Allerdings wäre es damit schon mal deutlich entspannter, die an einen MC 
anzuschliessen.
Über USB: ich denke mal, da brauchst du auf dem MC ein USB-OTG, sonst 
geht nichts.

von fop (Gast)


Lesenswert?

Auch auf die Gefahr hin, dass ich Dich jetzt missverstanden habe :
Du weißt schon, dass es in jedem USB-Verhau genau einen Master, ein bis 
mehrere (theoretisch 127) Slaves und 0 bis mehrere Hubs geben muss. 
Wobei ein Gerät meist eine feste Vorstellung hat, ob es Master oder 
Slave ist. Ausnahme sind spezielle USB OTG (on the go) Geräte, die mit 
Einschränkungen beides können. Das sind aber meist Tablets, die über die 
selbe Buchse sowohl mit dem PC als auch mit einem USB Stick verbunden 
werden können.
Ein USB-RS232 Wandler ist auf der USB-Seite immer ein Slave, genauso wie 
die Maus. Sollte sich eigentlich nicht zusammen stöpseln lassen und 
funktioniert so auch nicht. Deine einzige Hoffnung wäre, dass Mäuse oft 
noch beides können USB und RS232. Du erkennst es daran, dass ein 
passiver Adapter von USB auf SUB-D durch die Verkaufsverpackung fällt. 
Dann verbinde sie über einen Pegelwandler mit deinem Mikrokontroller. 
Die andere Seite kannst Du dann wie gehabt über Wandler mit dem PC 
verbinden.

von Bernd Strobel (Gast)


Lesenswert?

Eventuell lohnt sich mal das Aufschrauben der Maus. In der alten 
USB-Maus von Logitech, die ich hier habe, steckt ein Optical Mouse 
Sensor von Agilent (ADNS-2051), der über I2C mit einem MC Cypress 
spricht, welcher eigentlich nur das USB-Interface realisiert. Der 
Cypress ist sogar im DIL-Gehäuse. Platz ist in der Maus genug. Man 
könnte die Beinchen des MC einfach abknipsen und dann anschließen, was 
man mag...

Hab ich mir für ein späteres Projekt schon vorgemerkt. :)

von Bernd Strobel (Gast)


Angehängte Dateien:

Lesenswert?

Achso, hier ist das Datenblatt des Agilent-Chips. Ich denke, der ist 
sehr verbreitet. Die Logitech-Maus enthält ziemlich genau die Schaltung 
von Seite 6.

Der Cypress MCU scheint nur ein PROM zu haben. Hab nichts darüber 
gefunden, wie man ihn programmiert. Er ist ansonsten ein typischer 
8bit-MCU. Ich werde ihn einfach rausschmeißen.

von Amateur (Gast)


Lesenswert?

Sowohl das elektrische, als auch das logische Protokoll, vertragen sich 
nicht mit dem USART.

von Bruno M. (brumay)


Angehängte Dateien:

Lesenswert?

Erst mal danke für die vielen Antworten!

fop schrieb:
> Du weißt schon, dass es in jedem USB-Verhau genau einen Master, ein bis
> mehrere (theoretisch 127) Slaves und 0 bis mehrere Hubs geben muss.
> Wobei ein Gerät meist eine feste Vorstellung hat, ob es Master oder
> Slave ist.

Ich muß zugeben, ich habe mich mit USB praktisch nicht beschäftigt.

Bernd Strobel schrieb:
> Eventuell lohnt sich mal das Aufschrauben der Maus. In der alten
> USB-Maus von Logitech, die ich hier habe, steckt ein Optical Mouse
> Sensor von Agilent (ADNS-2051), der über I2C mit einem MC Cypress
> spricht, welcher eigentlich nur das USB-Interface realisiert.

So neugierig war ich natürlich schon um festzustellen wie es innen 
aussieht. Verbaut ist ein ADNS-2700. Datenblatt im Anhang. Daraus bin 
ich aber nicht so richtig schlau geworden. Ich entnehme aber daraus, daß 
der Controller nur ein Mal programmiert werden kann.

Es müßte aber doch gehen, wenn ich D+ und D- des Chips nur anzapfe und 
die Maus am PC betreibe, oder?

von Markus F. (mfro)


Lesenswert?

Bruno M. schrieb:
> Es müßte aber doch gehen, wenn ich D+ und D- des Chips nur anzapfe und
> die Maus am PC betreibe, oder?

Nein. Die Maus sendet mit Sicherheit erst dann Positionsdaten, wenn sie 
der Host per USB protokollgemäß dazu aufgefordert hat.

von Bruno M. (brumay)


Lesenswert?

Markus F. schrieb:
> Die Maus sendet mit Sicherheit erst dann Positionsdaten, wenn sie
> der Host per USB protokollgemäß dazu aufgefordert hat.

Aber das geschieht doch, wenn ich die Maus am PC betreibe.

von Markus F. (mfro)


Lesenswert?

Bruno M. schrieb:
> Markus F. schrieb:
>> Die Maus sendet mit Sicherheit erst dann Positionsdaten, wenn sie
>> der Host per USB protokollgemäß dazu aufgefordert hat.
>
> Aber das geschieht doch, wenn ich die Maus am PC betreibe.

Ach so, Du willst da "schmarotzen"?

Das mag schon gehen, wenn Du es schaffst, das HID-Protokoll zu 
entziffern. Aber dann mußt Du ja für deine µC-Anwendung immer einen PC 
mitliefern? ...

Es dürfte einfacher sein, die Daten "raw" vor dem USB-Chip in der Maus 
abzugreifen und entsprechend auszuwerten.

: Bearbeitet durch User
von Bruno M. (brumay)


Lesenswert?

Markus F. schrieb:
> Aber dann mußt Du ja für deine µC-Anwendung immer einen PC
> mitliefern? ...

Ich verfolge damit keine höheren Ziele, es ist pures Interesse:-)

von H.Joachim S. (crazyhorse)


Lesenswert?

Dann nimm doch lieber eine passende Software...
Das hier könnte das richtige sein:
http://freeusbanalyzer.com/

von Bernd Strobel (Gast)


Lesenswert?

Bruno M. schrieb:
> So neugierig war ich natürlich schon um festzustellen wie es innen
> aussieht. Verbaut ist ein ADNS-2700. Datenblatt im Anhang. Daraus bin
> ich aber nicht so richtig schlau geworden. Ich entnehme aber daraus, daß
> der Controller nur ein Mal programmiert werden kann.

Damit hast du sicher kein Glück. Dieser Chip ist offensichtlich alles in 
einem. Er hat gleich einen USB-Port. Es ist kein MC mehr für die 
USB-Anbindung nötig und damit kommt man nicht mehr an die Ausgabedaten 
des Sensors ran.

Vielleicht eine ältere Maus beschaffen?

Amateur schrieb:
> Sowohl das elektrische, als auch das logische Protokoll, vertragen sich
> nicht mit dem USART.

Ja klar, aber die meisten MCs haben sowohl USART(s) als auch mindestens 
ein I2C interface. Man muss nur ein bisschen flexibel bleiben...

von Amateur (Gast)


Lesenswert?

Im erweiterten Sinne ist das USB-Protokoll Master-Slave-Orientiert. Der 
µC müsste in diesem Falle den Part des Masters übernehmen.

Rein elektrisch passt es aber schon nicht. Die Daten werden 
differentiell übertragen. Das geht schon nicht mit einer USART.

Logisch gesehen werden die Daten in einem eigenen Protokoll, mit Adresse 
Anforderungsbefehl und dem vollen Programm rundum, übertragen.
Keine Ahnung, ob sich das, mit einem festen Rahmen (7, 8, oder weis der 
Kuckuck wieviel Bits) wie beim "normalen" seriellen Protokoll, 
bewerkstelligen lässt.

Schätze da brauchst Du einen Prozessor, der von Haus aus, für so etwas 
gedacht ist, oder einen externen Chip. Diese müssen aber dann auch fähig 
sein, den Part des Masters zu übernehmen.

von Bernd Strobel (Gast)


Lesenswert?

Amateur schrieb:
> Im erweiterten Sinne ist das USB-Protokoll Master-Slave-Orientiert. Der
> µC müsste in diesem Falle den Part des Masters übernehmen.

Ok. Missverständnis, ich dachte du beziehst dich auf meinen Beitrag 
bezüglich des Sensorchips mit dem I2C-Interface. Bezüglich USB hast du 
völlig recht.

Wenn es unbedingt USB sein muss, kann der TO sich ja mal einen 
ATmega32U2 o.ä. anschauen. Der kann USB-Host sein, wenn ich mich recht 
erinnere.

von Bruno M. (brumay)


Lesenswert?

Amateur schrieb:
> Die Daten werden
> differentiell übertragen.

Was bedeutet das genau?

von TheBug (Gast)


Lesenswert?

Bernd Strobel schrieb:
> Der Cypress MCU scheint nur ein PROM zu haben. Hab nichts darüber
> gefunden, wie man ihn programmiert.

CY7C63723 hat ein OTP-EPROM, kann also nur ein mal programmiert werden, 
mangels Fenster im Gehäuse ist kein Löschen möglich.
Die Chips sind noch in Produktion, werden aber nicht für neue Projekte 
unterstützt, entsprechend sind auch die Entwicklungswerkzeuge nicht mehr 
erhältlich.
Der ADNS2051 ist nicht mehr in Produktion.

von TheBug (Gast)


Lesenswert?

Bruno M. schrieb:
> Was bedeutet das genau?

Das bedeutet, dass es hilfreich wäre zu wissen was denn am Ende raus 
kommen soll, statt Spekulationen zu folgen wie Du meinst, dass das 
ginge.

von Amateur (Gast)


Lesenswert?

Differentiell:

Hierzu findest Du einfache Erklärungen rund um das RS485-Format, würde 
mich auch wundern, wenn die Wikipedia nichts dazu hergibt.

Wann immer Daten, über eine größere Entfernung, übertragen werden müssen 
und dass auch noch schnell (nicht unbedingt bei einer Maus) aber z.B. 
über einen CAN-Bus, wird ein differentielles Format verwendet.
Ist nicht so anfällig für Störungen.

von Bruno M. (brumay)


Lesenswert?

Amateur schrieb:
> Hierzu findest Du einfache Erklärungen rund um das RS485-Format, würde
> mich auch wundern, wenn die Wikipedia nichts dazu hergibt.

Danke, wieder etwas schlauer!

von crami (Gast)


Lesenswert?

@Bruno

Sowas geht nur mit einer "uralt"-Maus mit 9-poligem Stecker, den Du an 
die Serielle Schnittstelle des PCs anschliessen konntest (Maus mit der 
Gummikugel, die man immer reinigen musste...).

Moderne Mäuse haben eine USB-Schnittstelle, mittelarterliche eine PS-2.
Beide laufen über eine Schnittstelle mit Date- und Clock-Leitung wie 
beim I2C-Bus. Um die Signale umzuwandeln gibt es Adapter:
   USB -> PS-2
   PS-2 -> seriell (1200  Baud)
   PS-2 -> USB

Zu den Anschlüssen:

http://www.interfacebus.com/PC_Mouse_Pinout.html
http://www.interfacebus.com/serial-mouse-pinout.html
http://paulbourke.net/dataformats/serialmouse/

Ein PS-2 Keyboard bzw. Maus kannst Du folgendermassen an den Arduino 
anschliessen:

http://www.practicalarduino.com/projects/ps2-keyboard-or-mouse

(Caveat:   Echte RS-232 Stecker haben +/- 12 Volt  !)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

crami schrieb:
> Beide laufen über eine Schnittstelle mit Date- und Clock-Leitung wie
> beim I2C-Bus.

Nein. Nur die "PS/2" verwendet getrennte Takt- und Datensignale. USB 
hingegen verwendet zwei Datenleitungen mit symmetrischer Signalisierung, 
Takt und Daten sind hier gemischt.

> Um die Signale umzuwandeln gibt es Adapter:

Diese Adapter wandeln keine Signale um, sondern signalisieren der 
bilingualen Hardware der Maus, welches Protokoll sie erzeugen soll. 
Der µC in solchen Mäusen spricht nämlich beide Protokolle, USB und PS/2, 
und wird durch den Adapter dazu gebracht, das jeweils passende Protokoll 
zu erzeugen.

Lediglich PS/2-zu-USB-Adapter (also zum Betrieb von PS/2-Geräten an 
einem USB-Anschluss des PCs) gibt es in "echter" adaptierender 
Ausführung, darin steckt ein µC, der vom PS/2- in das USB-Protokoll 
übersetzt.

Zweisprachige Mäuse gab es übrigens früher auch schon mal, als der 
Wechsel von seriellen Mäusen für die RS232-Schnittstelle auf die 
PS/-Schnittstelle erfolgte. Damals war der Betrieb einer nicht 
bilingualen Maus mit einem nicht dafür vorgesehen Adapter durchaus 
riskant; eine reine PS/2-Maus konnte man mit dem Signalpegel einer 
RS232-Schnittstelle in die ewigen Mausgründe jagen ...

von Jim M. (turboj)


Lesenswert?

Bruno M. schrieb:
> Es müßte aber doch gehen, wenn ich D+ und D- des Chips nur anzapfe und
> die Maus am PC betreibe, oder?

Dann müsstest Du die Signale aber verdammt schnell abtasten, USB Low 
Speed sind 1,5 MBit/sec und Du musst so Faktor 2 oder besser 4 schneller 
sein. Andere Mäuse fahren u.U. auch USB FS mit 12 MBit/sec.

Es gibt preiswerte Mikrocontroller mit USB Host bzw. USB OTG, dort 
könnte man eine USB Maus direkt anschließen. Das sind dann allerdings 
keine 8-Bit AVR sondern meist 32-Bit ARM Cortex-M3 oder M4. USB Host ist 
auch von der Software her leider alles andere als trivial, aber viele 
Hersteller liefern auch USB Host Stacks für ihre µCs.

von Georg (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Lediglich PS/2-zu-USB-Adapter (also zum Betrieb von PS/2-Geräten an
> einem USB-Anschluss des PCs) gibt es in "echter" adaptierender
> Ausführung

Nicht ganz richtig. Ich hatte 2 Adapter zum Anschluss von USB-Geräten an 
PS/2-Anschlüsse (weil ich einen aufwendigen KVM-Schalter mit PS/2 habe), 
leider hat bloss einer davon korrekt funktioniert. Richtig ist dass man 
danach lange suchen muss.

Georg

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.