Forum: PC-Programmierung 9bit Daten mit FT232/FT245 übertragen


von Benedikt (Gast)


Lesenswert?

Der Betreff sagt schon alles:
Ich benötige eine Unterscheidung bei den übertragenen Daten zwischen
Befehle und Daten, daher brauche ich irgendwie ein 9. bit.
Kann man sowas mit einem FT... machen, und wenn ja wie ?

Am normalen PC UART gehts mit ein paar Tricks, aber beim FT232 ist das
warscheinlich sehr viel schwerer.

von Jochen Pernsteiner (Gast)


Lesenswert?

Bei seriellen Protokollen macht man das normalerweise mit sog.
Escapezeichen.

Beispiel: Du hast drei Kommandobytes mit den Werten 0,1,2.

Die schickst Du auch genau so. Wenn Du jetzt Datenbytes mit denselben
Werten senden willst, stellst Du diesen ein Escapezeichen voran (dessen
Bytewert Du halt vorher festlegen musst. Im ASCII-Zeichensatz ist das
z.B. Wert 27).

Anstatt 1 schickst Du jetzt also 27, und dann 1.
Wenn Du den Datenwert 27 senden willst, schickst Du 27 zweimal.

Empfängerseitig: Immer wenn der Empfänger ein Escapezeichen bekommt
(hier Wert 27), dann interpretiert er das nächste Byte als Datenbyte.

Theoretisch könntest Du jedem Datenbyte immer eine 27 voranstellen, was
natürlich Blödsinn ist. Immer nur Datenbytes, deren Wert einem
Kommandowert entsprechen, und dem Escapezeichen selber.

Wenn in Deinem Datenstrom viele Datenwerte mit Kommandowerten
vorkommen, sinkt natürlich Deine Datenrate entsprechend.

von Benedikt (Gast)


Lesenswert?

Die Escapezeichen sind echt eine Alternative. Wiso komme ich selber nie
auf sowas einfaches ?
Ich denke ich werde es so machen.

Damit ich nicht noch einen zweiten Thread aufmachen muss, hier noch
eine andere Frage:
Kann ich den FT232 als virtuellen COM Port so initialisieren, dass er
CTS verwendet ?
Ich möchte, dass der FT232 nur Daten sendet wenn CTS auf Low liegt.

    dcb.BaudRate = baud_rate;
  dcb.ByteSize = 8;
  dcb.Parity = NOPARITY;
  dcb.StopBits = ONESTOPBIT;

  dcb.fOutxCtsFlow = TRUE;
  dcb.fAbortOnError = FALSE;
  fSuccess = SetCommState(hCom, &dcb);

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

"Kann ich den FT232 als virtuellen COM Port so initialisieren, dass er
CTS verwendet ?"

Das sollte sich exakt genauso verhalten wie bei einer "echten"
seriellen Schnittstelle. Also Hardwarehandshake einschalten, genauso,
wie Du es in der Zeile

  dcb.fOutxCtsFlow = TRUE;

auch machst.

Dieses Flag ist so beschrieben:

  fOutxCtsFlow
    Indicates whether the CTS (clear-to-send) signal is
    monitored for output flow control. If this member is
    TRUE and CTS is turned off, output is suspended until
    CTS is sent again.


Viel Erfolg.

von Benedikt (Gast)


Lesenswert?

@Rufus
Stammt diese Beschreibung aus einem Buch oder von einer Internetseite
?

Ich suche nämlich schon seit längerem sowas, wo alles schön erklärt
ist.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Beschreibung stammt aus der MSDN-Dokumentation von Microsoft.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/dcb_str.asp

von Tobi H. (tobi-) Benutzerseite


Lesenswert?


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.