Forum: Mikrocontroller und Digitale Elektronik Max485 mit automatischer Umschaltung senden/empfangen?


von Mike (Gast)


Lesenswert?

Hallo
gibt es einen Bausten für RS485 der automatisch auf Senden umschaltet 
wenn am DI Pin Daten empfangen werden. Bei dem Max485 CPA521 muss man 
die RE und DE Leitung vor jedem Senden auf high schalten.

von Spess53 (Gast)


Lesenswert?

Hi

Monoflop

MfG Spess

von Mike (Gast)


Lesenswert?

dann muss ich aber je nach Bautrate das Monoflop umändern um unnötige 
Wartezeit zu verhindern.

von Falk B. (falk)


Lesenswert?

@ Mike (Gast)

>dann muss ich aber je nach Bautrate das Monoflop umändern um unnötige
>Wartezeit zu verhindern.

Ja, woher soll den eine Schaltung auch wissen, wann sie wieder auf 
Empfangen/Senden umschalten soll? Sinnvollerweise macht das der uC an 
dem der Tranceiver hängt selber, denn der weiss, wann er was will (sofer 
der Programmierer das weiss ;-)

MfG
Falk

von Spess53 (Gast)


Lesenswert?

Hi

Das ist richtig. Aber irgendwann wirst du dich doch auf eine Baudrate 
geeinigt haben. Eine Alternative wäre, statt RS485-Treiber 
Can-Bus-Treiber zu verwenden. PCA82C250/251 haben so etwas schon 
eingebaut. So habe ich das Problem gelöst.

MfG Spess

von Mike (Gast)


Lesenswert?

Direkt nach dem Senden darf ich diese Leitung ja noch nicht abschalten, 
da die Hardware UART ja noch sendet. Kann ich irgendwie abfragen wann 
die UART alles übertragen hat?

von Falk B. (falk)


Lesenswert?

@ Mike (Gast)

>Direkt nach dem Senden darf ich diese Leitung ja noch nicht abschalten,
>da die Hardware UART ja noch sendet.

Richtig erkannt.

> Kann ich irgendwie abfragen wann die UART alles übertragen hat?

Ja, der AVR hat zwei Interrupts. UDRE wenn der FIFO leer ist, TXC 
(Transmit complete) wenn das letzte Byte komplett übertragen wurde. 
Andere Controller haben sicher ähnliches.

MfG
Falk

von Dieter W. (dds5)


Lesenswert?

> ... wenn das letzte Byte komplett übertragen wurde.

Da gibt es leider die tollsten Auswüchse.

Die PIC18F setzen den transmit complete wenn die Datenbits weg sind und 
das Stopbit anfängt. Nun ist zwar das Stopbit sowieso die Ruhelage 
aber schön ist es nicht, den Sender mitten im Bit abzuschalten oder man 
muss sich extra eine baudratenabhängige Wartezeit erzeugen.

von Stefan W. (wswbln)


Lesenswert?

...und in manchen RS485-Umgebungen ist es auch noch notwendig, den 
Sender eine gewisse Zeit VOR dem Senden der Nutzdaten einzuschalten. 
Dann wird's mit der einfachen Monoflop-Schaltung eng, das geht dann nur 
noch mit P-Logik (P wie "probability" - wahrscheinlich kommen gleich 
Sendedaten.... ;-))

Man wird um eine gewisse Intelligenz beim Programmieren des steuernden 
µCs also kaum herumkommen :)

von Falk B. (falk)


Lesenswert?

@ Dieter Werner (dds5)

>Da gibt es leider die tollsten Auswüchse.

>Die PIC18F setzen den transmit complete wenn die Datenbits weg sind und
>das Stopbit anfängt. Nun ist zwar das Stopbit sowieso die Ruhelage

PIC eben . . .;-)

>aber schön ist es nicht, den Sender mitten im Bit abzuschalten oder man
>muss sich extra eine baudratenabhängige Wartezeit erzeugen.

Denke ich nicht. Die meisten RS485 Busse haben ja eh eine Failsafe 
-Pull-up Schaltung, da wird der Bus auf HIGH gehalten. Damit passt es 
schon, wenn gleich es etwas unschön ist.

MFG
Falk

von Tcf K. (tcfkat)


Lesenswert?

Dieter Werner wrote:
>> ... wenn das letzte Byte komplett übertragen wurde.
>
> Da gibt es leider die tollsten Auswüchse.
>
> Die PIC18F setzen den transmit complete wenn die Datenbits weg sind und
> das Stopbit anfängt. Nun ist zwar das Stopbit sowieso die Ruhelage
> aber schön ist es nicht, den Sender mitten im Bit abzuschalten oder man
> muss sich extra eine baudratenabhängige Wartezeit erzeugen.

Ebend, Daten raus muss nicht das Stopbit beinhalten, da sollte man sich 
genau die verwendete UART angucken. Non-driven RS485 muss zwar highpegel 
annehmen, aber einen Glitch kann man sich damit immer noch erzeugen.

Wichtig ist bei Multimasterbetrieb eine saubere Protokollabsicherung, 
wenn mal mehr als einer den Bus nehmen will. Selber am Rx mitzuhorchen 
geht nicht, weil bei langen Leitungen die so gegeneinander treiben, dass 
jeder trotzdem sauber seine eigenen Sendedaten hören kann. Da hilft nur 
ein ACK durch den Slave, und per Zufallsgenerator für jeden Master 
unterschiedliche und inkrementale Retrydelays, sonst können die schön in 
einen Deadlock reinlaufen (zwei Master versuchen immer wieder nach der 
gleichen Zeit den Bus zu nehmen).

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.