Forum: Mikrocontroller und Digitale Elektronik FT232BM empfängt echo im RxBuf[] von TxBuf[]??


von Frank (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

habe mein µC mit nem Max485 am USB-RS485 verbunden und sende mit .NET 
mit nem simplem Dialog openport(), WriteFile(), ReadFile(),ClosPort() 
meine Daten. Die Kommunikation funktioniert soweit gut abei 115kBaud 
doch leider empfange ich im RxBuf auch meine gesendeteten Daten. Wenn 
ich die Verbindung mit dem µC trenne habe ich auch noch die gesendeten 
Daten aus meinem TxBuf am Anfang von RxBuf stehen.
Mit anderen Konvertern habe ich nicht das Problem!


I füge das Programm einfach mal an, welches nurt noch comliliert werden 
muss mit einem screenshot vom watch-fenster.

Hat jemand schon mal mit so einem Konvertor gearbeitet? Normalerweise, 
darf er die Kommunikation nicht beeinflussen und einfach den ComPort 
"spielen"!

Der Konverter ist ein FT232BM mit dem Treiber von:
http://www.ftdichip.com/Drivers/VCP.htm 2.04.06

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dir ist klar, daß RS485 eine Halbduplexverbindung ist und daß ein Sender 
am RS485 die eigenen gesendeten Daten "mithört"?

von Frank (Gast)



Lesenswert?

Da es keine wirliche "RX" bzw "TX" Leitung gibt sondern A&B kann ich 
anhand /RE und DI erkenne ob ich sende oder im Empfangsmodus bin. Aber 
der Konverter muß sowas doch wissen bzw. mit der Entprechenden 
Pinbelegung aus dem Datenblatt genau diese Problem schlatungstechnisch 
intern Vermeiden, da er ja sonst mein Protokoll beeinflusst. Mein RS485 
sendet meinem µC ja auch nicht die vom µC gesendetetn Daten zurück... 
oder ist das etwa anders...
ich hänge das pdf von der Manual man an.

gruß

von Ralf (Gast)


Lesenswert?

> ... Aber der Konverter muß sowas doch wissen bzw. mit der Entprechenden
> Pinbelegung aus dem Datenblatt genau diese Problem schlatungstechnisch
> intern Vermeiden, da er ja sonst mein Protokoll beeinflusst.
Nein, eben nicht!

Zur Erläuterung (und wie Rufus bereits sagte) hört sich ein 
RS485-Teilnehmer selber reden. Und das ist gut so, weil er dann erkennen 
kann, ob ein anderer Busteilnehmer gleichzeitig gesendet hat, was den 
Bus stört. Man muss dazu den Tx- mit dem Rx-Buffer vergleichen, nachdem 
das letzte Zeichen gesendet wurde.

FTDI verwendet in den AppNotes genau diese Schaltungsart und steuert 
soweit ich weiss /RE und DI getrennt an. Wenn du nicht hören willst, was 
du rauspustest, dann musst du /RE und DI mit dem gleichen Signal 
ansteuern.

Ralf

von Frank (Gast)


Lesenswert?

Das heist, dass ich beim öffnen des ComPort auch die Handshake-Signale 
DTR und RTS setzten / zurücksetzten muss, damit der Konverter weis, das 
er jetzt sendet und ich damit RE und DI setzte  zurücksetzte...  ich 
versuches mal...

von Frank (Gast)


Lesenswert?

nix.... ich kann doch bestimmt mit DCB settings meinem Konverter sagen 
wnn ich sende oder wann ich empfangen soll, da intern villeicht ein 
Handshake wie beim rs232 geschieht oder? ...

in diesem Falle müsste mann mit folgenden Funktionen arbeiten:


z.B.: EscapeCommFunction(_hCom, SETRTS);

oder generell einstellen:

// CtsRtsFlowControl:
      dcb.fOutxCtsFlow = TRUE;
      dcb.fOutxDsrFlow = FALSE;
      dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
      dcb.fOutX = FALSE;
      dcb.fInX = FALSE;

    // CtsDtrFlowControl:
      dcb.fOutxCtsFlow = TRUE;
      dcb.fOutxDsrFlow = FALSE;
      dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
      dcb.fOutX = FALSE;
      dcb.fInX = FALSE;

  // DsrRtsFlowControl:
      dcb.fOutxCtsFlow = FALSE;
      dcb.fOutxDsrFlow = TRUE;
      dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
      dcb.fOutX = FALSE;
      dcb.fInX = FALSE;

  //DsrDtrFlowControl:
      dcb.fOutxCtsFlow = FALSE;
      dcb.fOutxDsrFlow = TRUE;
      dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
      dcb.fOutX = FALSE;
      dcb.fInX = FALSE;


Gibt es zusätzlich noch ein Byte was ich setzten muss umd wirlich nur 
ein Senden zu realisieren?
Gruß

von Ralf (Gast)


Lesenswert?

Mir war eigentlich so, als ob die FTDIs das Umschalten über eine 
spezielle IO-Funktion unterstützen. Nix mit Umschalten per RTS/CTS oder 
DTR/DSR. Guck doch nochmal im Datenblatt nach, müsst mich arg täuschen, 
wenns nicht so ist.

Ralf

von Ralf (Gast)


Lesenswert?

> Mir war eigentlich so, als ob die FTDIs das Umschalten über eine
> spezielle IO-Funktion unterstützen. Nix mit Umschalten per RTS/CTS oder
> DTR/DSR. Guck doch nochmal im Datenblatt nach, müsst mich arg täuschen,
> wenns nicht so ist.
Sorry, ich hatte recht und doch unrecht :)

Die könnens zwar, aber erst seit der R-Version. Okay, an meiner Aussage 
die Richtungsumschaltung mit dem gleichen Signal zu machen ändert sich 
dadurch aber nix. Damit stellst du den Treiber dann auf taub, wenn er 
sendet.

Ralf

von Frank (Gast)


Lesenswert?

Bei FTDI Support sagte man mir, das ich je nachdam welchen Pin ich vom 
SUB-Stecker beschalte ECHO ON/OFF schalten kann. Natürlich íst es von 
Nutzen seine eigenen gesendetetn Daten zu sehen, aber bei einem Master 
und mehreren Slaves die Antworten, kann das besser SW-technisch 
ermöglicht werden, um somit die Datenrate zu reduzieren etc..

... leider habe ich von FTDI noch keine Anwort, welche Pins ich jetzte 
genau und wie beschalten muss...

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.