Forum: Mikrocontroller und Digitale Elektronik Com1 geht USB Seriell Wandler spinnt


von Lars B. (larsb)


Angehängte Dateien:

Lesenswert?

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?

von Stefan F. (Gast)


Lesenswert?

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.

von Εrnst B. (ernst)


Lesenswert?

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.

von Lars B. (larsb)


Lesenswert?

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
von USB (Gast)


Lesenswert?

So viel ich weis, hat der Arduino keine USB Masterfunktion. Und zwei 
Cients (Arduino und USB-Seriell-Wandler) zu verbinden geht leider nicht.

von Lars B. (larsb)


Lesenswert?

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

von Lars B. (larsb)


Lesenswert?

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

von Ulrich F. (Gast)


Lesenswert?

Lars B. schrieb:
> Aber zum glück leicht im code zu beheben.

Nein!
Das kann nur per Hardware gelöst werden.

von Εrnst B. (ernst)


Lesenswert?

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)

von Lars B. (larsb)


Lesenswert?

Oh, ich dachte ich müsste nur die bits invertieren.
Da hab ich zu einfach gedacht.
Das ist logisch.
Werde einen konverter probieren.

von Lars B. (larsb)


Lesenswert?

Danke für die schnellen und kundigen Antworten.

von Jim M. (turboj)


Lesenswert?

Das olle serielle Maus Protokoll (MS) hat nur 7 Datenbits. Könnte Deine 
Probleme erklären.

von Lars B. (larsb)


Lesenswert?

Es nenn sich mouse systems Protokoll.

Hat mich auch erst verwirrt aber google hat mich irgendwann hingeführt.

von Lars B. (larsb)


Lesenswert?

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