Forum: Haus & Smart Home ASCII Wahnsinn zwischen den Welten


von Josef K. (zumlin)


Lesenswert?

Vorab eine kleine Erklärung:

Habe 3 Geräte, die über RS232 mit einem anderen Partner kommunizieren 
können sollen.

Gerät 1: WindowsXP mit emulierten COM-Port. Darauf greift ein C++ 
Programm.
Gerät 2: Ein Psion Revo mit einem Terminal Emulator Programm
Gerät 3: Ein Atmega128 mit Programmierter UART Schnitstelle

Rein theoretisch sollten alle Geräte miteinadner kommunizieren können. 
Können sie aber nicht.

Der Psion kann vom µC Zeichen empfangen und senden.
Der Psion kann vom PC Zeichen empfangen und senden.
Der Pc kann aber nicht mit dem µC kommunizieren. Weder senden noch 
empfangen. Weder mit Hyperterminal noch Docklight.

Komisch an der Sache ist auch, dass der Psion anscheinend Sonderzeichen 
falsch interpretiert. z.B. wird aus einer # ein Pfund Zeichen.
Komisch komisch. woran das wohl liegen kann. Als Besonderheit bei der 
Verbindung von µC zu PC ist zu sagen, dass ich mit einem Kabel 
weiblich-weiblich zum umstecken arbeiten muss.

Woran kann das denn liegen?

von Günther S. (Gast)


Lesenswert?

Wahrscheinlich schickt der uC die Zeichen zu schnell. Selbst ein Z80 mit 
4 MHz kann einem GHz-Pc die Zeichen seriell um die Ohren hauen, daß der 
nichts mehr versteht. Erst recht die Emulation über einen USB-Port kann 
die Zeichen nicht schnell genug verarbeiten. Abhilfe: Handshake per Hard 
oder Software, oder Wartezeiten zwischen den Zeichen einbauen. Ich nehme 
mal an, daß Baudrate Stoppbits, Parity etc richtig eingestellt sind. 
Hyperterminal hat noch die Unart, Einstellungen erst nach einem Neustart 
zu übernehmen, obwohl alles richtig angezeigt wird.

von Compy (Gast)


Lesenswert?

ASCII, wie du schon sachst... guck mal, mit welchen Kodierungen deiner 
Partner reden. Windows und COM ist schon nit-so-dolle (Erfahrungswert), 
dann noch Cplusplus, da kräuseln sich mir die Zehennägel. Das sind 
Vorurteile, weiß ich ja, aber auf dem Weg von C++ über Windows und 
Portemulator bis zur Hardware kann ganz schön viel passieren.

Was die Geschwindigkeit angeht: Wenn du x Kilobaud einstellst, müsste 
wenigstens das erste Zeichen ankommen. X kb sind x kb, da könnte nur 
noch ein Überlauf ganzer Zeichen auftreten, aber die einzelnen Zeichen 
müssten trotzdem korrekt ankommen (eben wenn überhaupt).

Evtl. Benutzt du auch Parität oder krumme Wortlängen bei der Übertragung 
(7 bit, 9 bit oder sowas). Dabei könnte dann z.B. das Umschaltbit (8. 
Bit) flöten gehen, was dann u.U. auf den erweiterten ASCII-Zeichenvorrat 
umschaltet.

von Josef K. (zumlin)


Lesenswert?

Das mit emuliertem Com Port auf Windows und C++ ist mir auch nicht so 
ganz geheuer. Aber außer C++ weiß ich jetzt auch nicht wie ich meinen 
Empfänger auf dem PC gestalten soll. Evlt .Net, aber da kenn ich mich ja 
noch weniger aus.

Grundsätzlich muss ich noch hinzufügen, dass ich mit 8N1 und 9600 Baud 
arbeite. Das ich mal die Baud runter stelle, darauf bin ich noch 
garnicht gekommen :) Das wär wohl die schönste Lösung für mich. Ich 
probier das mal aus wenn ich mal wieder Zeit dafür hab.

Das mit dem Handshake kapier ich gar nicht so recht. Wenn ich mit meinem 
µC einfach ein paar Zeichen raus Schick, indem ich ganz simpel die Daten 
in die UDR lade, kann ich dann ein Handshake auf der Gegenseite 
benutzen, oder muss ich dazu noch was machen an meinem µC-Programm?

von Compy (Gast)


Lesenswert?

Handschütteln meint ja vereinfacht gesagt, dass auf zusätzlichen 
Signalleitungen signalisiert wird:
* Hallo, ich höre
* Pass auf, jetzt fang ich an zu quatschen
* Habsch verstanden

Ist wie beim Telefon, wenn du nicht vorher wählst (könnte z.B. DTR beim 
seriellen Verkehr sein: Data Terminal Ready), kommt an der Gegenstelle 
auch nix an.

Probier mal Mikrocontroller -> Mikrocontroller. Ach, noch was: du hast 
doch nen Pegelwandler (MAX232 oder sowas) verbaut?!

von Josef K. (zumlin)


Lesenswert?

Auf dem Board war schon ein MAX3221 verbaut.

Hab jetzt ein bißchen gespielt. Alles in allem sehr sehr komisch.
Ich habe mal alle Baudraten durchprobiert. Eine Kommunikation von µC und 
meinem C++ Programm fand erst ab einer Baudrate von 9600 und aufwärts 
statt.
Allerdings hatte ich ein paar Probleme mit C++ und den Threads, deshalb 
bin ich auf C# (sehr schön) umgesattelt und da läuft die Kommunikation 
Psio-PC sehr gut. Nur mit dem µC garnicht, was ich garnicht verstehen 
kann

Mit dem µC schicke ich zyklisch einfach mal den String "hallo"+CR+LF, 
wobei CR = 0x0a und LF=0x0d (also die Delimiter) sind.
Bei meinem Psion wieder mal perfekt, bei meinem C# Programm rein 
garnichts. Ich lese die Daten mittels der DataReceived Action von 
SerialPort aus, aber da springt mein Programm anscheined garnicht mal 
rein. Irgendwas läuft da mächtig schief. Blos was?

von Josef K. (zumlin)


Lesenswert?

Oh mein Gott. Ich habs jetzt rausgefunden was ich falsch gemacht hab.
Das Probelm war eingentlich eine Kombi aus 2 Problemen.

1. Hab ich teilweise bein meiner UART0 Initialiserung in die UART1 
Parameter geschrieben, was dazu führte, dass evtl die Schnitstelle auf 
9N1 stand. Das hat aber meinen Psion nicht gestört. Super. Damit hab ich 
das schon mal lange nicht in Betracht gezogen.

2. ist der USB-to-COM Wahnsinn ein großer Klumpen Müll. Mit einem 
anderen geht jetzt alles. Ich weiß zwar nicht warum dieser plötzlich 
nicht mehr geht, bzw. nur mit dem Psion, aber der neue ist irgendwie 
besser.


So, nun ists raus. Danke für alle beim miträtseln :)

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.