COM-Port Problem - Daten kommen falsch zum PC-Terminal

Hallo arduino-Gemeinde!

Mein erstes Post - aber wahrscheinlich nicht zum ersten mal das Problem. Ich habe allerdings leider noch keine entsprechenden Antworten - weder hier, noch anderswo im Netz gefunden.

System: Arduino MEGA 2560

Folgende einfache Aufgabe:

void setup(){

//  Serial1.begin(38400);
//  Serial2.begin(19200);
  Serial3.begin(4800);

//  Serial1.println("Hello Serial 1");
//  Serial2.println("Hello Serial 2");
  Serial3.println("Hello Serial 3");
}

void loop() {}

Soweit, so logisch und auch einfach - ansich. ABER: verbunden mit dem PC (Linux Debian(SID), FTDI USB->serial Adpator, gtkterm als Terminalprogramm) Alles (eigentlich) korrekt eingestellt, also entsprechende Bps, parität, 8 Daten-/1 Stopbit(s) etc. - doch es kommen immer falsche Daten am Monitor an. Habe selbiges auch mal mit Windows, onboard-COMport und Teraterm versucht, weil ich von nem angeblichen Bug bei gtkterm gelesen hatte, welcher bei führendem NULL-Byte probleme bereiten sollte, aber auch hier werden falsche Daten angezeigt - aber immer reproduzierbar die gleichen falschen Daten. Allerdings
Wo könnte ich da nachschauen?! Bin ratlos.

PS: wenn ich die anderen Schnittstellen auch mit Daten beliefere, dann kommt es zu kleinen Unterschieden (Bitfehlern?) in den Daten auf einer Schnittstelle (timing-Problem?). Lasse ich nur auf eine Schnittstelle schreiben, kommen zumindest immer die selben (falschen) Daten an:

Ausschnitt aus gtkterm:
00 AB D3 D2 52 A4 CB 55 - DA D4 EA 3A FA CB 56 EB ....R..U ...:..V.
00 AB D3 D2 52 A4 CB 55 - DA D4 EA 3A FA CB 56 EB ....R..U ...:..V.
00 AB D3 D2 52 A4 CB 55 - DA D4 EA 3A FA CB 56 EB ....R..U ...:..V.
00 AB D3 D2 52 A4 CB 55 - DA D4 EA 3A FA CB 56 EB ....R..U ...:..V.
00 AB D3 D2 52 A4 CB 55 - DA D4 EA 3A FA CB 56 EB ....R..U ...:..V.
00 AB D3 D2 52 A4 CB 55 - DA D4 EA 3A FA CB 56 EB ....R..U ...:..V.
00 AB D3 D2 52 A4 CB 55 - DA D4 EA 3A FA CB 56 EB ....R..U ...:..V.
00 AB D3 D2 52 A4 CB 55 - DA D4 EA 3A FA CB 56 EB ....R..U ...:..V.
00 AB D3 D2 52 A4 CB 55 - DA D4 EA 3A FA CB 56 EB ....R..U ...:..V.
00

Mach ich das selbe über den USB-Arduino-Port, also COM0(?) und den Portmonitor, stimmen die Daten

Vielen Dank
-C-

Hoi,

wie hast du denn den FTDI angeschlossen?

Gruß Sebastian

Der FTDI ist fertig in einem USB - Serial- Adapter (ich gläube VSCom) verbaut. Hat meiner Ansicht nach auch nix damit zu tun. Ein parallel genutzter Prolific PL2303 Adapter hat den gleiechen Datenmüll ergeben. Und wie gesagt eine onboard-serielle eines älteren PC unter Widnows genauso.
Jetzt frag ich mich allerdings die Frage, wie das mit den Pegeln ist. Kann das daran liegen?

Welche Pegel meinst Du?
Grüße Uwe

Ich meine die RS232 Pegel. Das kann doch - soweit ich das gelesen habe - bei 3.3V losgehen, über 5V (TTL) bis (offiziell) +-12V RS232.
Was bietet das Arduino Mega für Pegel? Habe leider noch kein Oszi hier, sonst würde ich das ja rausfinden.

BTW: gibts Empfehlungen für günstige Oszis? z.b die Selbstbaudinger bei Watterott? Sind die verwendbar?

Alles bezogen auf 5V Versorgugsspannung.
Eingangspegel:
RS232 Pegel sind für H -3V bis -25V für L +3V bis +25V.
Serielle Schnittselle mit TTL-Pegel: H 3,0V bis 5V, L 0 bis 0,7V. (praktisch die L und H pegel der ATmega-Eingänge.
Ausgang
RS232 PC +/-12V
MAX232 oder Ähnliche +/- ca 10V
Serielel TTL-Pegel 0 und 5V.
Grüße Uwe

Okay und danke für die Aufstellung. Jetzt muss ich also die Doku für den USB->RS232 Adaptor suchen und schauen, was dort steht.

Dann frag ich mich aber gleich die Frage, woher die USB-FTDI Kiste die Pegel für +/-10V her nehmen soll? USB bringt ja bekanntlich nur 5V.

Auf der Serielle Seite des USB interface sind die Pegel TTL-Kompatiebel nicht RS232. Damit diese auf RS232 Pegel gebracht werden, werden zb MAX232 benutzt. Die haben 2 interne Ladungspumpen für die notwendigen Spannungen ( 1 Kondensator wird mit der Versorgungspannung 5V geladen und dann in Reihe mit der Versorgungsspannung auf einen 2.Kondensator entladen. Von diesem wird ein dritter Kondenstor geladen und umgekeht geplt auf einen 4. Kondenator geladen; so erhält man +/- 10V) und treiber um die Pegel anzupassen.
Grüße Uwe

Hm, okay, dann schieb ich das mal darauf, dass der Ardu TTL erwartet bzw. bringt und der USB-Adaptor mittels ZT213lfea (offensichtlich ähnlich dem MAX232) den Pegel anhebt und deshalb nicht passt. Kann das so sein? Dann würde ich gleich mal ein entsprechenden TTL-Fähigen besorgen.

Und zur Zusatzfrage: das Oszi bei Watterott zum selberbauen - kennt das hier jemand?? Bzw. kann das jemand empfehlen/nicht empfehelne?
Wie siehts mit Bus-Pirat vs. Openlogicanalyser aus?

Das kleine DSO von jyetech habe ich und den OLS ebenso.

Der zusammenbau des osci war ganz ok, aber nichts fuer einsteiger. Die faehigkeiten des osci sind zum herumspielen ganz nett, mehr aber nicht. Daten einer seriellen schnittstelle kann es ganz gut anzeigen. Der RCA anschluss (stecker) ist absoluter muell. Wenn du ernsthaft ein digitales osci brauchst/willst, dann nimm ein kleines rigol oder vergleichbares. Das 'spielzeug' kommt sehr schnell an seine grenzen und ist mit nur einem kanal nur sehr begrenzt fuer richtiges arbeiten zu gebrauchen.

Den OLS kann ich waermstens empfehlen!

Miß einmal die Spannung die der USB-Adabter ohne Datenverkehr ausgibt. TX gegen Masse. Ist das eine negative spannung von ca 9V?

Zum DSO
Ich hab das Vorgängermodell von http://www.watterott.com/de/Digitales-Speicher-Oszilloskop-DSO-Bausatz-improved

Als ersten Ratschlag, der aber jetzt nicht mehr angebracht ist, weil serienmäßig alle SMD Teile eingelötet sind. Die alte Version gab es mit allen SMD Teilen eingelötet oder einige € billiger nur mit einigen. Widerstandslöten ist eine stressige Sache weil sooo klein.
Kauf Dir den Tastkopf gleich mit. http://www.watterott.com/de/Tastkopf-fuer-JYETech-DSO

Zu allen Oszilloskopen ist zu sagen man muß wissen, wie man sie bedienen muß ansonsten hat man Probleme. Es ist nicht so leicht wie man annimmt.

Im großen und ganzen nettes Ding, das aber seine Grenzen hat und zu den Grenzen kommt man schneller, als einem lieb ist.

Kaufberatung: schwere Frage. In manchen Fällen ist es hilfreich In andern reicht ein Multimeter oder man bräuchte ein richtiges Osziloskop.

Viele Grüße Uwe

@uwe: nicht -9V aber knapp -6.3V. Ich habe den Adaptor nun mal auseinander genommen und werde heute abend mal versuchen, das Signal einfach vor den TTL-RS232 Wandlern abzugreifen, also quasi direkt nach dem FTDI. Habe da auch schon RX und TX gefunden. Nun muss ich nur noch entsprechend dünne Litze finden, welche an die schmalen Beinchen passt ohne zu brücken. Sollte doch funktionieren, oder?
Hm, oder kann das mit dem ZT213F zu Problemen führen, weil der für den TTL-In intern nen Pullup von rund 500k hat? Hab da leider noch nicht soo die Erfahrung sammeln können.

Und @madwürm: okay, das ist doch mal ne aussage.

Muss ich doch mal schauen, ob ich nicht billich irgendwo n 10-20MHz Oszi auftreiben kann. Sollte ja für den Anfang reichen. Hab da bei Reic***t ein picoscope (USB-Oszi) gesehn. Mutet erstmal recht interessant an.

Gruß
-c-

Du mußt aber die RX-Leitung des USB-TTL Interface von der TX des RS232-TTl Converter Baustein durchtrennen da ansonsten der RS232-TTL Converter den Ausgang blockiert.
Grüße Uwe

Achherje, daran hab ich nicht gedacht - hatte ja auch folglich nicht funktioniert. Nungut (oder auch nicht) ich will den Adaptor nicht zerstören, dazu war der zu teuer. Ich habe hier noch ein FTDI-Bausatz von einem Buch herum zu fleigen - ich werde mich mal mit diesem auseinandersetzen. Da sehe ich keinen Wandler drauf, welcher eingreifen könnte. Mal schauen, ob ich den zum laufen bekomme.

Jeehaw... das wars! Jetzt hab ich endlich meine erste serielle Übertragung hinbekommen. Supper! Danke für die Hinweise und Tips!
Ihr werdet mcih bei Gelegenheit - sprich meiner alsbald auftauchenden nexten Frage - wieder lesen :wink:

Thx
-c-