Com1 geht USB Seriell Wandler spinnt

OP #4089764
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?
Angehängte Dateien:
Gast
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.
OP
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
}
OP
@ 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.
OP
@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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.