Max485 mit automatischer Umschaltung senden/empfangen?

#649991
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
Gast #649992
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
#650019
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
#650263
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.
#650273
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 :)
#650681
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
#650870
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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren