mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS-485 lahm?


Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallöchen,

ich habe den LTC485 jeweils einmal an Atmel Mega32 und Mega8 gehängt
(beide TQFP) einfach RX und TX jeweils drauf und n zusätzlicher
Pin für die Flusssteuerung. Soweit so prima,
Die Daten laufen auch schön von A nach B und andersrum, nur
wenn ich Daten von A nach B nach A senden will, also im Pingpong
muß ich bei der umstellung der LTC von Lesen nach schreiben
und zurück jeweils ein delay von mindestens 20 ms einbauen,
da ohne die Pause die Daten verloren gehen ... irgendwo
hängt der Bus da im Nirvana (ist nur 20cm Draht).

Hat da schonmal jemand ähnliche Probleme gelöst und evtl. n
Tip für mich? oder idealerweise evtl. n Schaltungsbeispiel
über n laufenden LTC485?

Autor: Wolfgang Horn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, Marko,

ich bekenne hier eine Peinlichkeit, die zu ähnlichen Symptomen führte.
Abhilfe: Die Senderoutine fragt nach Sendung das UCSRnA ab auf TXCn.
Erst dann darf es den LTC485 wieder auf Empfang schalten.

Ciao
Wolfgang Horn

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei es bei mir erst funktionierte, also ich zu TXC noch ein Bit oder
so drauflegte. Meine Vermutung ist, dass die AVRs TXC schon während des
Stopbits anzeigen, was beim Empfänger zum framing error führt.

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zum TXC noch n Bit zu?
Sorry, aber das ist mir ziemlich hoch,
was meinste damit?

also wenn ichs richtig verstanden hab
hol ich mir das UCSRB und kontrolliere
das 7te Bit auf ja nein für den TXC,
richtig?
halt, nee, UCSRA Bit 6, stimmts?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf TXC warten, und den Transmitter erst 1-2 Bitzeiten später
abschalten.

Ebenso sollte der angesprochene Slave noch etwas mehr Bitzeiten
abwarten, bevor er nach empfangender Botschaft selber seinen
Transmitter einschaltet. Bei UARTs gibt es prinzipbedingt ein Risiko,
dass der Receiver bereits während des einlaufenden Stopbits das
empfangende Byte anzeigt. Wenn ein Slave dann sofort mit der
Übertragung loslegt, hat er exzellente Chancen, gegen den Rest vom
Stopbit des Masters zu kämpfen, also Transmitter gegen Transmitter zu
schalten.

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du meinst also
einfach 2-3-mal
noop
für ebensoviele wartezyklen?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, was ist auf der seriellen wohl eine Bitzeit?

Bei 9600bps ungefähr 100µs.

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nehmt den 82C250, der ist zwar ursprünglich für CAN, kann aber auch für
RS-485 eingesetzt werden. Umschalten nicht notwendig, man bekommt eben
immer ein Echo seiner Daten und das wiederum kann zum Detektieren von
Kollisionen genutzt werden. Der 82C250 ist übrigens auch
"Kollisionsfest", da sich 0-Pegel durchsetzt - bei den üblichen
RS-485 Bausteinen gibts in diesem Fall einen Crash.

Gruß
Thomas

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das mit dem 82C250 ist n prima Tip,
Super! Werd ich im nächsten Layout beherzigen.

Im Übrigen ist wer der Suche benutzen kann klar im
Vorteil ich Depp!!

Hab n Codescchnipsel für meine verwendete Hochsprache
gebuunden, das vom kompilieren her läuft.
Für alle die mal ähnliche Probleme schieben
und die Suche verwenden hier mal:

$regfile = "m8def.dat"

$crystal = 1000000

$baud = 1200


Do

Do                                                          ' Warten
bis das TXC Bit gesetzt ist.
loop until UCSRA.TXC = 1

Set UCSRA.TXC     ' zum zurücksetzen von TXC muss 1 geschrieben
werden
                  ' gemäss Datenblatt
Set PortB.1            ' Umschalten von Senden auf Empfangen am RS485


Loop

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.