Hallo. Ich trete hier etwas auf der Stelle. Ich möchte Daten von einem recht alten Trackball mit einem Arduino verwerten. Der Trackball liefert serielle daten mit 1200baud (8N1). 5byte mouse protokoll. Anschlüsse hat der nur V+, GND und TX. Am com1 port von PC läuft das fein (siehe bild rechts). Am arduino und an einem prolific usb seriell wandler erhalte ich aber nicht die selben daten (siehe bild links). In dem Beispiel empfangen beide schnittstellen die selben Daten (Problem tritt aber auch mit dem Arduino alleine Auf). Meine üblichen Probleme (Baudrate falsch, GND nicht verbunden, falscher quarz am uc) habe ich schon durch ausgeschlossen. Der code auf dem arduino liest den Empfangspuffer und schreibt die ersten 5 bytes in ein array, das dann über den virtuellen com Port an den PC geschickt wird. Das Problem habe ich aber auch mit dem Prolific usb seriell wandler. Kann es sein dass einzelne bits verpasst werden und sich dadurch andere bytes ergeben?
Offensichtlich sin in deiner Kette zwei serielle Schnittstellen, von denen eine vermutlich nicht funktioniert. Trenne diese Schaltung auf und kontrolliere jede Schnittstelle einzeln. Dann hast bist du dem Ziel schon 50% näher.
Berücksichtigt, das "normales" RS232 invertiert arbeitet? Also -12V = True, +12V = False? Das machen die "USB->Seriell(TTL)"-Wandler nicht, hier ist 0V = False, 5V = True. Deshalb können die direkt (ohne MAX232) mit den RX/TX-Pins eines AVR/Arduino gekoppelt werden.
hier kommt noch der verwendete code für Arduino leonardo mit Atmega 32u4
1 | byte inputBuffer[5]; // For incoming serial data |
2 | |
3 | |
4 | void setup() |
5 | {
|
6 | Serial.begin(115200); //virtual com port on pc |
7 | while(!Serial); // wait for initialization |
8 | Serial1.begin(1200,SERIAL_8N1); //hardware uart |
9 | while(!Serial1); |
10 | |
11 | }
|
12 | |
13 | void loop() |
14 | {
|
15 | |
16 | |
17 | if (Serial1.available() >= 5) { |
18 | |
19 | Serial1.readBytes(inputBuffer, 5); //write bytes to array |
20 | Serial.print(inputBuffer[0], BIN);Serial.print("\t\t\t"); // serial output |
21 | Serial.print(inputBuffer[1], BIN);Serial.print("\t\t\t"); |
22 | Serial.print(inputBuffer[2], BIN);Serial.print("\t\t\t"); |
23 | Serial.print(inputBuffer[3], BIN);Serial.print("\t\t\t"); |
24 | Serial.println(inputBuffer[4], BIN); } |
25 | |
26 | |
27 | }
|
28 | }
|
:
Bearbeitet durch User
So viel ich weis, hat der Arduino keine USB Masterfunktion. Und zwei Cients (Arduino und USB-Seriell-Wandler) zu verbinden geht leider nicht.
@ Stefan Us Es sind jeweils 2 serielle schnittstellen in verschiedenen Kombinationen. 1. Tackball > PC über com1 funktioniert 2. Trackball > Arduino > PC 3. Trackball > USB seriell wandler klappt auch nicht Bei Nr2 bin ich sicher dass Arduino zu PC funktioniert. Danke Εrnst B✶, Das war mir nicht bekannt. Das könnte ein zweites problem sein. Aber zum glück leicht im code zu beheben.
@usb Der Arduino wird nicht als usb host genutzt. Das ist der PC. Habe das mit dem USb seriell wandler wohl etwas umständlich geschrieben. Der USB Seriell wandler ist nur eine zweite möglichkeit die auch nicht geht.
Lars B. schrieb: > Aber zum glück leicht im code zu beheben. Nein! Das kann nur per Hardware gelöst werden.
Lars B. schrieb: > Aber zum glück leicht im code zu beheben. Leider nicht. Denn die Start- und Stopbits sind ja auch "umgekehrt", d.H. der UART im Arduino oder im USB-Stöpsel können sich nicht sauber auf den Byte-Anfang synchronisieren. Also: Inverter davor. (Transistor + Widerstände reicht)
Oh, ich dachte ich müsste nur die bits invertieren. Da hab ich zu einfach gedacht. Das ist logisch. Werde einen konverter probieren.
Das olle serielle Maus Protokoll (MS) hat nur 7 Datenbits. Könnte Deine Probleme erklären.
Es nenn sich mouse systems Protokoll. Hat mich auch erst verwirrt aber google hat mich irgendwann hingeführt.
Der Inverter war die richtige spur. Jetzt läufts. Vielen Dank.
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.