Max485 mit automatischer Umschaltung senden/empfangen?

#649991
@ 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
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
Gast #650013
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?
#650019
@ 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
> ... 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
...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
@ 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
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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.