mikrocontroller.net

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


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Monoflop

MfG Spess

Autor: Mike (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tcf Kat (tcfkat)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.