Forum: Mikrocontroller und Digitale Elektronik Bus an Atmega32 funktioniert nicht


von Beta 4. (beta4881)


Angehängte Dateien:

Lesenswert?

Hi!

Ich habe folgendes Problem mit einem RS-485-Bus, den ich im Rahmen eines 
verteilten Roboters (der auf 3 Atmega32 aufbaut) verwende: Sobald ich 
mehr als 2 Teilnehmer an den Bus anschließe, wird die Datenübertragung 
teilweise fehlerhaft. Entweder werdn Zeichen übertragen, die nach 
Übertragungsfehlern aussehen, oder die Teilnehmer antworten gar nicht. 
Das ganze scheint mir nicht immer gleich aufzutreten, manchmal 
funktioniert die Kommunikation auch, wenn man die Busstecker neu 
einsteckt oder die Reihenfolge am Bus ändere.

Aufbau wie folgt:

http://img263.imageshack.us/img263/2120/aufbaupk1.jpg

(Schaltpläne im Anhang!)

Der PC stellt mit der Busumsetzerbox den Master dar, die bis zu 3 
"Seiltrommelboxen" die Slaves. Der PC ist alternativ über USB oder per 
RS-232 (seriell) anschließbar.

Für den RS-485-Bus wurde der Baustein max488 für 4-Draht-Technik 
verwendet (Datenblatt http://www.maxim-ic.com/parts.cfm?p=MAX488). 
Schließt man die Seiltrommelboxen jeweils einzeln an, funktioniert die 
Kommunikation wunderbar, bei einer zusätzlichen Box nur noch mit 
Schwierigkeiten, bei einer weiteren gar nicht mehr.

Buskabel: Hier wurde ein herkömmliches Netzwerkkabel (Patch, nicht 
Crossover) verwendet. Dieses transportiert auf 4 Adern die Datensignale 
und auf den restlichen 4 Adern die 12V Spannungsversorgung. Jede 
Mikrocontrollerplatine in den Seiltrommelboxen zieht ca. 100mA. Die 
Verkabelung erfolgt als Ring, also an jedem Teilnehmer sind 2 Buchsen, 
wo  der Bus durchgeschleift und für die aktuelle Box abgegriffen wird. 
Die Kabel sind jeweils nur 2-5 m lang.

Abschluss: Verwendet man nur 2 Teilnehmer am Bus, funktioniert die 
Kommunikation wunderbar auch ohne Abschluss (s. Datenblatt). Bei 
mehreren Busteilnehmern führt das Hinzufügen des Abschlusses nicht zu 
einer Verbesserung, stattdessen steigt der Stromverbrauch um 100-200 mA 
- was ich etwas viel finde.

Irgendwelche Ideen, was der Fehler sein könnte?

Evtl. Ansatzpunkte:

- Signal und Versorgung in einem Kabel. 12V Gleichstrom bei max. 300-500 
mA halte ich eigentlich nicht für bedenklich bei Übertragungsraten von 
2400 bps bis 9600 bps

- Baustein max488: Lt. Hersteller Maxim gibt es zwei Varianten 
(http://www.maxim-ic.com/parts.cfm?p=MAX488) für etwas verschiedene 
Temperaturbereiche, die sich jedoch überlappen: Darf man die evtl. nicht 
gemischt einsetzen?

von A.K. (Gast)


Lesenswert?

Für mehr als 2 Teilnehmer ist eine Tx-Enable-Leitung für alle Slaves 
zwingend nötig, da sonst mehrere aktive Tx-Treiber gegeneinander 
arbeiten. Daher auch der Stromverbrauch.

Abhilfe:
- RS422/485-Treiber mit Tx-Enable verwenden.
- CAN-Treiber verwenden.

Der MAX488 ist nur beim Master verwendbar, da dessen Tx-Leitungen mit 
den Rx-Leitungen der Slaves verbunden sind.

von Beta 4. (beta4881)


Lesenswert?

Mir ist schon klar, dass, wenn alle Slaves gleichzeitig sprechen, es zu 
Kollisionen kommt. Dies ist bei mir aber ausgeschlossen, die Teilnehmer 
haben alle "Adressen". Und wenn nur der angesprochene Baustein 
antwortet, sind meiner Einschätzung nach alle anderen weiterhin 
hochohmig.

Zudem: Im Datenblatt http://www.maxim-ic.com/getds.cfm?qv_pk=1111&ln=en 
auf S. 14 sieht es so aus, als könnte man nur mit max488 arbeiten.

Auf S.1 steht in der Tabelle, bei Verwendung von max488 könnten 32 
Teilnehmer auf dem Bus sein.

Was bringt eigentlich bei 4-Draht-Technik (Vollduplex) der Einsatz der 
Enable-Leitungen, also Unterschied zwischen max488 und max489. Wenn man 
das programmiert, würde man bei den zusätzlichen Enable Leitungen diese 
doch nur vor jedem Senden und Empfangen setzen müssen. Kollisionen sind 
damit auch nicht mehr eingeschränkt.

Oder?

von A.K. (Gast)


Lesenswert?

> sind meiner Einschätzung nach alle anderen weiterhin hochohmig.

Wie teilst du das dem MAX488 mit?

von Beta 4. (beta4881)


Lesenswert?

Na, solange sie nicht senden, sind die max488 "ab Werk" auf den tx 
leitungen hochohmig, bei den rx leitungen sind diese immer hochohmig. 
Das ist doch das Grundprinzip eines Busses. Wenn ich nicht jeden 
einzelnen Teilnehmer mit eigenen enable-Leitungungen an den Master 
anschließen kann, dann geht das doch nur so.

Ergänzung: Der Fehler gestaltet sich so, dass, wenn viele Boxen 
angeschlossen sind, nicht alle nicht antworten (wenn einzeln 
angesprochen), sondern dass eine der zwei Boxen meist  funktioniert - 
nach meinen Beobachtungen die, die als letztes an den Bus angeschlossen 
wurde.

von A.K. (Gast)


Lesenswert?

> Na, solange sie nicht senden, sind die max488 "ab Werk" auf
> den tx leitungen hochohmig,

Nein. Woher weiss der MAX488, dass er nicht sendet? Diese Information 
hat er nicht. 0 am Eingang heisst "0 senden", 1 am Eingang heisst "1 
senden".

Datasheet: "Driver Input. A low on DI forces output Y low and output Z 
high. Similarly, a high on DI forces output Y high and output Z low."

Es ist zieht also immer ein Ausgang hoch und einer runter. Die Begriffe 
sind allerdings nicht sonderlich glücklich gewählt, "Z" steht hier 
ausnahmsweise mal nicht für high impendance. "Output Z high" 
ebensowenig.

Die Angabe mit den 32 Teilnehmern ist anders zu lesen: Der Tx-Treiber 
kann maximal 32 Rx-Receiver verkraften.

von A.K. (Gast)


Lesenswert?

> ie, die als letztes an den Bus angeschlossen wurde.

Schon mal Finger dran gehalten? Kann nämlich sein, dass die schon länger 
angeschlossenen MAXe in der Zwischenzeit thermisch überlastet wurden und 
daher abgeschaltet haben.

von Peter D. (peda)


Lesenswert?

A.K. wrote:
>> sind meiner Einschätzung nach alle anderen weiterhin hochohmig.
>
> Wie teilst du das dem MAX488 mit?


Garnicht, die MAX488 kann man nicht parallel schalten, basta.

Im Datenblatt sind nur ICs parallel gezeichnet, die auch DE-,/RE-Pins 
haben.


Wenn man die Schaltungen selber aufbaut, aber keinen DE-Ausgang hat, 
nimmt man eben alles CAN-Treiber (PCA82C251).
Wenns unbedingt Voll-Duplex sein muß, braucht man aber die doppelte 
Anzahl.


Peter

von Wolfram (Gast)


Lesenswert?

>Na, solange sie nicht senden, sind die max488 "ab Werk" auf den tx
>leitungen hochohmig, bei den rx leitungen sind diese immer hochohmig.
>Das ist doch das Grundprinzip eines Busses
richtig, und DU als Entwickler bist für das Einhalten dieser Regel 
zuständig.
Der Tranceiver übersetzt nur die Pegel und hat keine eigene Intelligenz.

>Auf S.1 steht in der Tabelle, bei Verwendung von max488 könnten 32
>Teilnehmer auf dem Bus sein.
Wo steht,daß das MAX488 sein können?

alles andere hat A.K. schon geschrieben.

von beta4881 (Gast)


Lesenswert?

OK, vielen Dank!

Dann werde ich die Slaves mit max489-Bausteinen ausstatten, wo ich tx 
enablen kann (durch den zugehörigen Mikrocontroller, jeweils vor dem 
Senden). rx bei den slaves würde man bei vorhandener Adressierung ja 
immer active schalten (oder?). Und am Master reicht ein max488, der 
seine tx leitungen ja quasi für sich alleine hat. Die RX-Leitungen wären 
auch immer active, genauso wie bei den Slaves.

So sollte es doch klappen, oder?

Noch mal vielen Dank!

von A.K. (Gast)


Lesenswert?

So ist es richtig.

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.