RS485 stimmt das so

Gast #1834681
Hallo,
ich verwende als Master einen FT232RL mit MAX485, als Slaves verwende 
ich ATTINY2313 mit MAX485. Nun versuche ich schon verzweifelt das 
hinzukriegen aber das will irgendwie garnicht. 2-Draht A,B,GND 
verbunden. Ich habe mich auch totgegoglt, laut diesem Schaltplan sind 
die SLAVES DI<->TXD und RO<->RXD verbunden stimmt denn das so? Beim 
SLAVE ziehe ich DE und RE/ auf 5V wenn ich Daten schicken will, aber das 
Teil will nicht was mache ich falsch?

Danke schon mal.
Angehängte Dateien:
Gast
> Teil will nicht was mache ich falsch?

Ein gern gemachter Fehler besteht darin den Ausgangstreiber zu frueh 
abzuschalten. Du musst ja jedesmal nach dem senden eines Bytes die 
Treiber wieder in den Lesemodus schalten. Dazu musst du in deinem 
Controller ja irgendein Bit abfragen damit du weisst das dein Byte 
gesendet wurde.
Aber es muss eben auch wirklich ganz gesendet sein und es darf nicht so 
sein das lediglich der Buffer der Senderoutine frei ist, aber das Byte 
gerade rausgetaktet wird.


Olaf
Gast
Olaf schrieb:
> Aber es muss eben auch wirklich ganz gesendet sein und es darf nicht so
> sein das lediglich der Buffer der Senderoutine frei ist, aber das Byte
> gerade rausgetaktet wird.

Dafür wurde beim AVR der TX-Interrupt erfunden. ;-)
Gast
Der TX-Int feuert aber schon wenn der Puffer frei ist, die UART-Hardware 
sendet da noch (wahrscheinlich gerade das Startbit).
Moeglichkeit 1: RC-Glied in den Steuerleitungen, Werte an die Baudrate 
angepasst,
Moeglichkeit 2: die Steuerleitung laenger Aktiv halten, mindestens so 
lange, wie das Zeichen gesendet wird:
Puffer frei (Flag oder Interrupt): Starte Timer
Timer deffinierten Wert erreicht: schalte Steuerleitungen,
Moeglichkeit3:
ein Zeichen mehr senden, dieses kommt aber eventuell beim Enpfaenger 
nicht richtig an, eventuelle Fehlerflags beim Empfaenger behandeln.

mfg Frank
Gast
R8C29 hat uebrigens wirklich ein Bit mit dem er sagen will das er mit 
dem Senden fertig ist. :-P


Ich musste aber auch feststellen das dies nicht 100% zuverlaessig ist. 
Genauer gesagt setzt er das nicht immer, aber manchmal schon wenn er das 
Stopbit ausgibt. Das fuehrt dann dazu das man den Treiber etwa beim 
halben Stopbit abschaltet wenn man nicht drauf achtet.

Olaf
Gast
Schalte bei Halbduplexbetrieb (wie RS485) grundsätzlich den jeweils 
inaktiven Interrupt aus und lösche vor der Aktivierung das 
Interruptflag, dann feuert nix mehr.

Also vor dem Senden RX-INT abschalten und TX-INT-FLAG löschen.
Beim Empfang umgekehrt.

Einfacher gesagt: immer nur das direkt vorher aktivieren (und das 
INT-Flag löschen), was gebraucht wird.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.