Hallo Leute!
ich tüftel gerade an einer RS485-Schnittstelle.
Besonderheit: aus meinem UART bekomm ich nur Rx/Tx, da die übrigens
Handshake-Signale des uCs nicht aus meinem Gerät rausgeführt werden.
Nun die Frage:
Kann man sich das DE-Signal irgendwie durch einen kleinen
konfigurierbaren IC selbst herstellen? Dieser IC müsste dann selbst
erkennen, wann der Tx-Frame startet / endet.
Kennt Ihr da was - eventuell mit Baudrate / Timeouts einstellbar?
Vielen Dank im Vorraus!
RS485-Tüftler schrieb:> Kann man sich das DE-Signal irgendwie durch einen kleinen> konfigurierbaren IC selbst herstellen?
Warum lässt du das nicht den µC mit erledigen? Der weiß doch als Erster,
wann gesendet wird.
@Ralf G.:
Ist schon richtig, in meinem Bild hab ich ein paar Stecker weggelassen:
[uC]------Stecker-A--------[?]--[RS485-Driver]-----Stecker-B
Ich will nun eine Huckepack-Platine bauen, die zwischen Stecker-A und B
sitzt. Aus Stecker A kommen leider nur Rx/Tx raus.
@Dietmar:
Ich muss die Platine selbst bauen, da ich damit in eine vorgegebene
Mechanik passen muss. Sonst wäre Dein Vorschlag sicher eine gute
Alternative.
RS485-Tüftler schrieb:> Kann man sich das DE-Signal irgendwie durch einen kleinen> konfigurierbaren IC selbst herstellen?
Hallo,
im Prinzip einfach, du musst halt DE sofort einschalten wenn Tx aktiv
ist, und ausschalten, wenn Tx mehr als eine Zeichenlänge nicht mehr
aktiv ist. Da liegt der kritische Punkt, wenn die Antwortzeiten der
anderen Geräte kurz sind. Am besten geeignet ist ein Primitivprozessor
etwa im 8poligen Gehäuse, der kann auch die Tx-Zeichen mitdekodieren.
Die Verzögerungszeit sollte manipulierbar sein. Ein Monoflop ginge zwar
auch, aber ich sehe nicht was dabei der Vorteil sein soll.
Gruss Reinhard
RS485-Tüftler schrieb:> Ich will nun eine Huckepack-Platine bauen, die zwischen Stecker-A und B> sitzt. Aus Stecker A kommen leider nur Rx/Tx raus.
Du hast also keine Möglichkeit, aus dem µC noch 'ein Kabel
rauszuziehen'?
@Reinhard:
daran hab ich auch schon gedacht, aber FW schreiben versuche ich zu
vermeiden. Bei der Monoflop-Variante käme es - wie Du sagst - auf die
Protokoll-Timings an. Darum hab ich ja gehofft, es gibt schon was
fertiges, dass sich der Baudrate automatisch anpasst (eventuell noch
Timeout über Widerstand einstellbar).
@Ralf:
nein - ich möchte eine kleine Adapterplatine bauen, die von außen an das
Gerät angesteckt wird, ohne das Gehäuse für eine Leitung öffnen zu
müssen.
@Thomas:
Der RS485-Treiber muss umschaltbar sein, damit meine Gegenstelle auch
die Möglichkeit hat, mir zu antworten.
Habe für Sowas immer ein retriggerbares Monoflop (4538) genutzt, welches
auf reichlich 10 Bitzeiten eingestellt ist, Baudrate sollte also
feststehen. Nachteil: Umschaltung auf Senden erfolgt erst im ersten
Startbit und Rückschaltung u.U. erst einige Bitzeiten später.
mfG ingo
@ingo & Reinhard:
Wenn das bei Euch geklappt hat, probier ich das auch einfach mal ...
Muss ich mit meiner Gegenstelle austesten, ob die das erste (verkürzte)
Bit so akzeptiert und ob sie lange genug mit der Antwort wartet.
Vielen Dank erstmal!
Wenn der Bus Failsafe geschaltet ist (mit Abschlusswiderständen und
leicht vorgespannt ist, das im offenen Zustand sicher 1 erkannt wird),
sehe ich mit dem Startbit eigentlich kein Problem. Allerdings sollte ein
anderer Busteilnehmer nicht unmittelbar nach dem letzten Zeichen
antworten, weil das FF, wie gesagt, noch fast ein Zeichen "nachhängt"
und der Sender noch aktiv ist. Das kann man aber im Protokoll
berücksichtigen, da man ohnehin eine gewisse Zeit auf freies Medium
horchen sollte.
mfG ingo
Die zeitgesteuerte Umschaltung ist Schrott, denn sie geht davon aus,
dass der Controller nie eine Verzoegerung hat. Das mag am anfang ja auch
stimmen, aber mit zunehmendem Projekt kommt noch dies und das, dann eine
laengere Rechnung und die Verzoegerung beim Senden ist mehr als ein
Byte. Das wird schwierig zu debuggen...