Hallo, ich habe vor einige Geräte via MODBUS RTU zu steuern (VFD, JOG usw.), allerdings habe ich ein Verständnisproblem mit RTS und RE/DE. Wenn ich senden möchte, muss ich zuerst DE via RTS anschalten, soweit ok. Problem ist eher das Timing am Ende einer Transmission. Ich muss RTS ausschalten, wenn TX abgeschlossen wurde und wenn response (RX) noch nicht begonnen hat. Wie macht man das am besten ? Gibt es andere Lösungen ? Vielen Dank
markus breckenkamp schrieb: > Problem ist eher das Timing am Ende einer Transmission. Ich muss RTS > ausschalten, wenn TX abgeschlossen wurde und wenn response (RX) noch > nicht begonnen hat. > > Wie macht man das am besten ? Indem du RTS zum richtigen Zeitpunkt ausschaltest. Dieser Zeitpunkt hängt davon ab, wie viele Bytes dein Sende-FIFO zwischenspeichern kann. > Gibt es andere Lösungen ? Anders als was?
>> Gibt es andere Lösungen ? > > Anders als was? Ich finde immer wieder Schaltpläne wo RE und DE mit TX geschaltet wird. Hier z.B.: http://www.siongboon.com/projects/2006-03-06_serial_communication/rs485-opto-usb.png Würde das auch bei meinem Schaltplan funktionieren, wenn ich R2IN statt von RTS mit R1IN zusammenschalte damit dann RE und DE toggle ? (Siehe Bild)
markus breckenkamp schrieb: > Wie macht man das am besten 1. erst nach einer bestimmten Zeit den Sender abschalten - die notwendige Zeit hängt aber z.B. stark von der Baudrate ab. Man kann das auch mit dem Oszi analysieren und danach die Zeit einstellen, aber eigentlich ist das Murks. Wird was geändert funktioniert es nicht mehr. 2. feststellen, wann alles gesendet ist, z.B. Tx Register Empty abfragen, das hat aber nicht jedes UART. Oder am Tx-Pin mitlauschen. Georg
markus breckenkamp schrieb: > Ich finde immer wieder Schaltpläne wo RE und DE mit TX geschaltet wird. > Hier z.B.: > > http://www.siongboon.com/projects/2006-03-06_serial_communication/rs485-opto-usb.png Nein; dort werden RE und DE zusammen geschaltet, aber nicht durch das TXD-Signal, sondern durch das TXDEN-Signal, das der FT232RL für genau solche RS-485-Transceiver implementiert.
markus breckenkamp schrieb: > Wie macht man das am besten ? Man verwendet eine UART, die das in Hardware unterstützt. Ansonsten kannst Du zu Beginn Deiner Übertragung einen Timer aufziehen und ihn n Bytezeiten später einen Interrupt auslösen lassen, in dem Du die Handshakeleitung wieder zurücksetzt. Die nächste Möglichkeit ist eine UART, die mit Statusbits signalisieren kann, wann das letzte Byte das Sendeschieberegister verlassen hat. Bei einer Soft-UART ist das natürlich ein Abfallprodukt, das fällt quasi automatisch hinten 'raus. Willst Du einen PC verwenden, oder geht es um einen µC? Bei einem PC ist hier die Verwendung von USB-UART-Adaptern von FTDI ratsam, die nämlich haben eine die RS485-Unterstützung in Hardware. Dazu verwenden sie nicht eine der üblichen Handshakeleitungen, sondern haben eine dedizierte eigene Steuerleitungen.
Rufus Τ. F. schrieb: > Willst Du einen PC verwenden, oder geht es um einen µC? > > Bei einem PC ist hier die Verwendung von USB-UART-Adaptern von FTDI > ratsam, die nämlich haben eine die RS485-Unterstützung in Hardware. Dazu > verwenden sie nicht eine der üblichen Handshakeleitungen, sondern haben > eine dedizierte eigene Steuerleitungen. Ja , ist für den PC gedacht. Ein FTDI ist wohl doch eher die bessere Wahl. Daher habe ich meinen Schaltplan nochmal geändert. Ich Hoffe das passt jetzt alles.
Wenn Du /RE des RS485-Treibers fest auf Masse legst, empfängst Du natürlich auch alles gesendete selbst als Echo. Soll das so sein?
Rufus Τ. F. schrieb: > Wenn Du /RE des RS485-Treibers fest auf Masse legst, empfängst Du > natürlich auch alles gesendete selbst als Echo. Soll das so sein? UI, wollte grade das Layout ausdrucken. Gut das du das nochmal erwähnt hast. /RE kommt vermutlich an DE. Da wir garde dabei sind: wie sieht das mit RTS/CTS und DSR/DTR aus ? Diese werden an der SUB-D Buchse normalerweise verbunden. Sollte man das auch am FTDI machen ?
marcus breckenkamp schrieb: > Sollte man > das auch am FTDI machen ? Wenn Deine Software das braucht, ja. Sonst ist es auch an anderen PC-UARTs überflüssig.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.