Forum: Mikrocontroller und Digitale Elektronik RS485 am UART betreiben.


von Peter WIegand (Gast)


Lesenswert?

Hallo,

wie ist es mir möglich meinen Atmega8 direkt mit einer RS485 Gegenstelle 
zu vebinden?

Habe da Quellcodes gefunden und diverse Aussagen darüber das dies 
möglich sein soll.

Hier findet sich z.B. ein Quellcode der dies bewerkstelligen soll.
Ich weiß jedoch noch nicht so ganz wie ich den Controller beschalten 
muss
um das zum Laufen zu bekommen.

Ich habe bei RS485 zwei Datenleitungen und muss irgendwie umschalten
wenn ich senden will. So ganz bekomme ich das noch nicht in meinen
Kopf.

P.S: Ich will keinen MAX485 o.Ä verwenden aus Platzproblemen und wenn
die Datenübertragung etwas instabil ist, macht das nichts. Es handelt
sich nicht um Daten die "am Stück" ankommen müssen.
Hört sich komisch an, ist aber so ;). Der Controller wird einfach
von einem Baustein über RS485 permanent mit Daten beschossen, schnappt
diese auf und antwortet dann mit einem definiertem Wert. Wenn dabei ein 
paar
mal keine Antwort kommt, ist das nicht ganz so schlimm.

Danke für jede Antwort

Gruß

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du brauchst einen RS485-Treiberbaustein. Ohne geht nicht.

Platzgründe? Ein RS485-Transceiver ist ein 8poliges Baueelement. Dafür 
ist Platz da.

Das mit der Sender-/Empfänger-Umschaltung sieht so aus: Im Normalfall 
steht der RS485-Transceiver auf Empfangen; Dein µC hört am Bus mit. Nur, 
wenn er senden will, wird unmittelbar vor dem Senden des ersten Bytes 
der Transceiver auf Senden geschaltet und erst nach dem vollständigen 
Senden des letzten Bytes (also wenn das auch das UART-Schieberegister 
verlassen hat) der Transceiver wieder auf Empfang umgeschaltet.

von Hm (Gast)


Lesenswert?

Einen Max485 oder aenlichg gibt's in SO8 oder MSOP8 ... sorry.

von Amateur (Gast)


Lesenswert?

Die gesamte serielle Datenübertragung muss in (mindestens) zwei Ebenen 
betrachtet werden.
1. Das "Impulsmuster" an den Ausgängen Rx und Tx.
2. Die tatsächlich übertragenen elektrischen Pegel.

Die üblichen 0V und 5V (3,3V) passen in kein übliches Raster.

RS232 arbeitet offiziell (manchmal) mit +15 und -15V.
Dazu sind zwei Drähte (Rx + Tx) plus Masse vonnöten.

RS485 benutzt ein differentielles, elektrisches Format.
Aus diesem Grunde werden auch immer 4 Drähte (2 Paare) verwendet.
Hinzu kommt noch, dass die Leitungen definiert abgeschlossen werden 
sollen.
Dafür kannst Du aber auch mit wesentlich größeren Abständen zwischen 
Sender und Empfänger arbeiten.

Zur Erzeugung des differentiellen Protokolls gibt es fertige ICs und Du 
hast keinen Ärger damit.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Amateur schrieb:
> RS485 benutzt ein differentielles, elektrisches Format.
> Aus diesem Grunde werden auch immer 4 Drähte (2 Paare) verwendet.

RS485 wird im Halbduplexverfahren mit einem Paar abgehandelt, es werden 
also nicht immer zwei Paare verwendet.

von holger (Gast)


Lesenswert?

>Hier findet sich z.B. ein Quellcode der dies bewerkstelligen soll.

Wo? Dann nimm den doch.

von Peter WIegand (Gast)


Lesenswert?

https://github.com/kohyama/AVR-RS485
Habe jetzt auch festgestellt das es sich un eine Ansteuerung eines Rs485 
treibers handelt. So erklärt sich auch die umschaltung an dem einen Pin 
beim Senden.

von Michael K. (Gast)


Lesenswert?

Peter WIegand schrieb:
> Ich weiß jedoch noch nicht so ganz wie ich den Controller beschalten
> muss um das zum Laufen zu bekommen.

Nichts einfacher als das.
Es gibt einen Sender, der bekommt den TX
Der Empfänger bekommt den RX
Beide haben einen Eingang der die aktiv schaltet.
Das kann man jeweils separat machen, oder beide über einen pin 
umschalten.
Es ist somit z.B. möglich den Empfänger immer aktiv zu lassen und nur 
den Sender ein / auszuschalten.
Damit könnte man so eine art kollisionserkennung machen.

Will man nur eine einfache Punkt zu Punkt Verbindung unterscheidet den 
RS485 bis auf den RX/TX enable nicht von einem V24 Uart der in 
Halbduplex betrieben wird.
Jeder Sender muss nur wissen wann er dran ist mit senden.
Ein einfaches Master / Slave Protokoll funktioniert gut.
Der Master adressiert 'seine' Slaves, schickt Daten und fragt ggf 
geziehlt Daten ab.
Zur Beanteortung hat der Slave xx ms zeit, bis der Bus wieder frei sein 
muß.

Von Maxim gibt es die RS485 Treiber als nur RX oder nur TX auch im 
sot23-6.
Sonst weichst Du auf die uDFN aus, die sind 2x2mm groß.

von Nosnibor (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Du brauchst einen RS485-Treiberbaustein. Ohne geht nicht.

Das ist mir etwas zu extrem formuliert.

Die richtigen Ausgangspegel kann der AVR ja schon erzeugen. Muß man 
natürlich per software-UART machen, weil keine Hardware dafür vorgesehen 
ist, Gegentaktsignale zu erzeugen.
Für den differenziellen Eingang tut's erstmal der Analogkomparator. Auch 
hier wieder: Software-UART.
Natürlich gilt dann nur ein etwas eingeschränkter 
Eingangsspannungbereich; im  Ernstfall ist dann eben der Prozessor 
hinüber. Also zum Basteln geht's, aber man darf halt kein Risiko 
eingehen mit Leitungslängen, "Brummschleifen", etc.. Und immer einen 
Prozessor als Reserve bereithalten.

Nächste Stufe: RX und TX gemeinsam an die B-Leitung; A mit einem 
Spannungsteiler auf mittleren Pegel. Sollte zur Verständigung mit einer 
standardkonformen Gegenseite reichen, sofern man nicht vergißt, den 
TX-Pin bei Nichtgebrauch als Eingang zu konfigurieren. Damit gibt man 
aber sämtliche Vorteile des RS-485 gegenüber einer einfachen 
logic-level-UART-Verbindung auf; ich würde das also nur da machen, wo 
man auch problemlos IIC verwendet: innerhalb desselben Gehäuses, 
versorgt vom selben Netzteil usw.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Nosnibor schrieb:
> Rufus Τ. Firefly schrieb:
>> Du brauchst einen RS485-Treiberbaustein. Ohne geht nicht.
>
> Das ist mir etwas zu extrem formuliert.

Naja, was Du da beschreibst, würde ich schon eher als Hardcore-Frickeln 
verstehen.

Daher halte ich eher Rufus' Antwort für die normale, jedoch Deine 
Beschreibung eher schon "extrem formuliert" ;-)

von Nosnibor (Gast)


Lesenswert?

Mir ist halt das "ohne geht nicht" aufgestoßen. Wenn USB per bit-banging 
geht, muß das auch mit RS-485 gehen. Ob man damit glücklich wird, ist 
eine andere Frage.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.