PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenbus ~70 Meter entfernung



Robin1508
22.01.2008, 22:09
Hi, ich hoff ich bin in der richtigen Rubrik.
Ich bin auf der Suche nach einem Datenbus, der auch über eine Leitung von ca 70 Metern funktioniert. Am besten noch mehr Abstand.
Gibts da was brauchbares?

EDIT: Sollte auch möglichst einfach und mit wenig Kabeln mit AtMega32 Chips zu bewerkstelligen sein.

Gruß Robin.

python_rocks
23.01.2008, 07:12
Datenbus, der auch über eine Leitung von ca 70 Metern funktioniert
Hallo Robin!

Mir fällt jetzt auf die Schnelle nur das hier ein:

P82B96 - verlängert den I2C-Bus auf bis zu 250 Meter: http://www.alldatasheet.com/datasheet-pdf/pdf/82015/PHILIPS/P82B96.html

RS-485:
- https://www.roboternetz.de/wissen/index.php/RS485
- http://www.alldatasheet.com/view.jsp?Searchword=MAX485

mfg
Gerold
:-)

PICture
23.01.2008, 07:38
Hallo!

Beim langen Bus kann eine differenzielle Übertragung mit zwei Leitungen fast nicht gestört werden, weil sich im Bus indizierte gleichphasige Spannungen am Empfänger selber eliminieren. Deswegen finde ich RS-485 besser als I²C.

MfG

Felix G
23.01.2008, 07:39
Also I²C würde ich bei derartigen Leitungslängen lieber nicht verwenden, denn das ist eher für kleine Entfernungen gedacht...


Für Leitungslängen bis mehrere 100m kann ich dir CAN empfehlen, das ist ein sehr robustes Bussystem das auch in der Industrie oft eingesetzt wird.

Allerdings beherrscht das ein ATmega32 natürlich nicht direkt, du brauchst also zumindest noch einen CAN-Transceiver der dir die Pegel entsprechend anpasst, oder besser noch einen CAN-Controller der dir die Details des Protokolls erspart und dann vom ATmega z.B. per SPI angesteuert werden kann.


PS: es gibt übrigens inzwischen auch Atmel Controller mit eingebautem CAN-Interface, z.B. den AT90CAN32

Hessibaby
23.01.2008, 08:01
In der Industrie RS422 oder RS485

Siehe : http://de.wikipedia.org/wiki/RS-422

Gruß Hartmut

Volker-01
23.01.2008, 08:11
@ Felix G Hast du schonmal mit den AT90CANxx gearbeitet? Wenn ja, woher beziehst du die, wenn nicht über Digikey ?

Ansonsten muss ich sagen, würde ich einem nicht so bewanderten Elektronikbastler für den Anfang erstmal vom CAN abraten. Da ist der RS485 doch sehr viel leichter zu nutzen.

Gruß, Volker

askazo
23.01.2008, 08:31
@Volker: Ich habe auch schon mit dem AT90CAN gearbeitet.
Ich beziehe meinen Atmel-Krempel immer bei MSC (http://www.msc.de). Ich kann Dir allerdings nicht sagen, ob die auch an Privat liefern, in den AGBs steht aber keine Einschränkung auf gewerbliche Kunden drin. Einfach mal anrufen und nachfragen.

@Topic: Ich schließe mich Volker an: CAN ist sicher sehr gut für solche Entfernungen geeignet und zudem ziemlich flexibel, aber RS485 ist einfacher zu nutzen.

Gruß,
askazo

Felix G
23.01.2008, 08:48
@ Felix G Hast du schonmal mit den AT90CANxx gearbeitet? Wenn ja, woher beziehst du die, wenn nicht über Digikey ?Nein, ich weiß nur daß es diese µC gibt, aber selbst damit gearbeitet habe ich bisher nicht.

Ceos
23.01.2008, 09:38
da werf ich mich mal in die runde, ich wollte nämlich auch mal mit bussystemen experimentieren, ich bräuchte einen Bus unter 50m mit mehreren einkoppelstellen, aber es soll so low budget wie möglich werden, mit einem controller der das system kontrolliert und evtl. ner möglichen interruptartigen antworten von den eingekoppelten module zu erhalten, aber für jedes modul nen chip finde ich n bissl overkill.
kann man sowas nicht auch über ein cat5 kabel machen und dann mit n logikgatter ne art adressierung (flipflops)???
zur differentiellen übertragung, wie kann das umgesetzt werden ? mit transistoren die polarität in den leitungen wechseln sollte SO schwer nciht sein, aber wie bekomme ich das dann als logischen pegel in den controller ?

python_rocks
23.01.2008, 11:09
aber für jedes modul nen chip finde ich n bissl overkill.
Hallo Ceos!

Ein Kat5-Kabel, mehrere Abzweigungen und je einen MAX485. Diese MAX485 kosten ca. 2 Euro je Stück, wenn sie kein "E" im Namen haben. Zu finden z.B. bei Kessler oder CSD-ELECTRONICS.

mfg
Gerold
:-)

Robin1508
23.01.2008, 12:10
Also erstmal danke für die vielen Antworten. So wies aussieht eignet sich wohl der RS485. Werd mich mal über die Links die ihr gepostet habt schlau machen. Doch wie wende ich den Bus jetzt konkret mit meinem Atmega an? Gibts RS485 Befehle? Oder muss ich das selbst coden mit High und low? Oder wie läuft das ab?

und was ist mit Rs232 ? Funktioniert das nicht mehr auf die Entfernung? Wäre ja fast am einfachsten mit den Bascom Befehlen... ?

Robin

pongi
23.01.2008, 12:43
Den Atmega progammierst Du ganz normal so, wie Du es für RS232 tun würdest, nur statt einem MAX232 als Pegelwandler nimmst Du den MAX485.

Robin1508
23.01.2008, 12:57
Ach das is ja cool ^^
Danke

python_rocks
23.01.2008, 13:26
Hallo Robin1508!

Vorsicht! Der MAX485 kann nur Halbduplex. Das heißt: Während du etwas von einem Baustein aus zu den anderen Bausteinen sendest, kannst du nichts Empfangen. Und umgekehrt. Dafür brauchst du aber auch nur zwei Leitungen. Wenn du vier Leitungen zur Verfügung hast, dann kannst du mit MAX488 (und höher) gleichzeitig empfangen, während du etwas sendest. Nur wenn du solch einen Baustein und vier Leitungen einsetzt -- nur dann fühlt sich RS-485 in Bascom wie RS-232 an.

Wenn du nur zwei Leitungen verwendest und den MAX485 einsetzt, dann musst du zuerst über einen Pin des µC den MAX485 in den Sendemodus schalten. Dann sendest du deine Daten und dann setzt du den MAX485 in den Empfangsmodus. Dann kann dir der Client oder die Clients etwas zurück senden.

Wenn du kein Problem mit dieser Synchronisation hast, dann fährst du mit dem MAX485 nicht schlecht. Ansonsten würde ich zu einem höheren MAX48x-Baustein und vier Leitungen raten.

Außerdem musst du noch wissen, dass jeder Client die gleichen Daten empfängt. Du musst dich im Protokoll also selber darum kümmern, dass der richtige Client die Daten verarbeitet und du auch nur Antwort von dem Client bekommst, der vorher gefragt wurde. Dafür gibt es mehrere Protokolle. Aber das Einfachste ist wahrscheinlich, wenn du alle Clients die Kommunikation abhören lässt und im Übertragungsprotokoll zuerst übermittelst, für wen die Daten sind. Z.B. so:


Master an Client 1 --> "01-00:sende Status"
Client 1 an Master --> "00-01:OK"

Master an Client 2 --> "02-00:sende Temperatur"
Client 2 an Master --> "00-02:36.89"

Master an Client 3 --> "03-00:sende Luftdruck"
... Timeout
Master an Client 3 --> "03-00:ABBRUCH"
...

Diese Kommunikation bekommen zwar alle Clients mit und müssen sie auch komplett auswerten, aber alle hören auf das Kommando des Masters und stören sich somit nicht. Das ist zwar nicht ideal, aber in den meisten Fällen ausreichend. Dann gibt es noch Protokolle, die das Ganze ein wenig intelligenter machen. So, dass nicht jeder Client die ganze Kommunikation auswerten muss. Es gibt auch noch mehrere Möglichkeiten, die übertragenen Daten auf Übertragungsfehler hin zu überprüfen. Aber auch das ist eine Frage der Anwendung, ob das notwendig ist.

mfg
Gerold
:-)

Robin1508
23.01.2008, 13:49
Hm dann bleibt wohl die Frage ob mir 2 Leitungen reichen. Ich denke wenn ich es geschickt anstelle geht es. Also was ich damit vorhabe ist Folgendes: Ich möchte eine Hausklingel bauen. Da wir in unserem Haus massive Probleme damit haben. Wir haben eine Klingel unten an der Straße und eine direkt an der Haustüre. Im Haus haben wir zwei Hörer. Und bei uns ist es so, wenn jemand oben an der Haustüre klingelt, können alle mithören. Sprich auch die Fußgänger auf der Straße. Was dazukommt ist, dass wenn jemand im 1. Stock zuerst mit dem, der Klingelt redet, kann der im 2. Stock ebenfalls zum Hörer greifen, da er ja nicht weis dass unten schon jemand abgenommen hat.
Ich möchte es so machen, dass an jeder Klingel und an jedem Hörer eine Schaltung mit AtMega hängt und dass alle untereinander über einen Bus kommunizieren können. Also sendet z.B. die Klingel an der Straße dass hier geklingelt wurde und die Klingel an der Haustüre stellt automatisch ab und umgekehrt. Dazu kommt dass der, der im Haus als erstes den Hörer abnimmt auch nur der einzige ist der mit dem klingelnden Redet (alle anderen hören dan z.B. einen Besetzt Ton).

Ich stell mir das so vor. Es gibt 4 kabel (je nach dem ob 4 leitungen oder 2 für den Bus vorgesehen sind. Plus die Kabel die für die Tonübertragung zuständig sind. Ich will also unsere Haustürklingel so lassen wie sie ist, nur Relais zwischenschalten, die von dem Atmega gesteuert werden, dass die Leitung für alle unterbrochen ist bis auf den der klingelt und der im Haus als erstes abnimmt. Mit der Theorie kann auch ein Gespräch zwischen beiden, im Haus befindlichen Hörer aufgebaut werden ohne dass die Straße mithört.


Ich hoffe ich hab das alles verständlich erklärt... ^^

Die Frage ist nun ob eine Leitung mit 2 Drähten ausreicht oder nicht.

Gruß Robin

Hessibaby
23.01.2008, 15:02
Das ist eine Exclusiv Oder Funktion

Gruß Hartmut

Robin1508
24.01.2008, 17:55
Ok, aber was ich nich ganz versteh ist, das RS232 auf meinem RN-Control board ist dreipolig? Wie soll ich das mit 2 oder 4 Drähten anfahren?

Gruß Robin

TheHawk
24.01.2008, 18:31
Der mittlere Pin ist GND

Robin1508
25.01.2008, 12:26
und wie mach ich dass dan mit 4 leitungen ?

python_rocks
25.01.2008, 13:22
und wie mach ich dass dan mit 4 leitungen ?
Hallo Robin1508!

In meinem ersten Beitrag zu diesem Thema https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=346125#346125 hatte ich dir zwei Links zu RS-485 gepostet.

Einer der Links führt dich zu einem Wiki-Eintrag, der RS-485 erklärt. https://www.roboternetz.de/wissen/index.php/RS485

Der andere Link führt dich direkt zum Datenblatt des MAX485. In diesem Datenblatt wird nochmal erklärt, wie man die Geräte zusammenschließt, mit welchen Spannungen gearbeitet wird und welche Widerstände als Abschluss dienen.

Weiters findest du im Datenblatt Anschluss- und Logikpläne der MAX-ICs.

Wenn du nur mit zwei Leitungen fährst, dann musst du beim Senden an die PINS ^RE und DE des MAX485 HIGH anlegen. Wenn du Empfangen willst, dann musst du an die Pins ^RE und DE des MAX485 ein LOW anlegen.

Das fällt weg, wenn du mit vier Leitungen überträgst. Vier Leitungen haben den Vorteil, dass du Statusmeldungen an ALLE schicken kannst und diese auch von ALLEN empfangen werden. Das ist bei zwei Leitungen nicht garantiert. Mit zwei Leitungen kommst du aus, wenn du die Kommunikation von einem MASTER aus kontrollierst und niemand ohne Aufforderung des MASTERs etwas "sagen" darf.

Wenn die Datenverbindung über zwei Leitungen stattfindet, dann musst du drei Leitungen vom µC zum MAX485 führen. TX, RX und einen Pin, über den du dem MAX485 mitteilst, ob du senden oder empfangen möchtest. Wenn du senden möchtest, dann legst du diesen zusätzlichen Pin auf HIGH. Und wenn du empfangen möchtest, dann legst du diesen Pin auf LOW.

Wenn die Datenverbindung über vier Leitungen stattfindet, dann musst du nur zwei Leitungen vom µC zum MAX führen. TX und RX. Es wird nicht zwischen Senden und Empfangen unterschieden.

In beiden Fällen arbeitest du über die in den µC eingebaute UART und kannst mit dem Bascom-Befehl PRINT die Daten versenden. Und zum Empfangen von Daten kannst du mit INPUT und den anderen üblichen Befehlen arbeiten. Da ich aber nicht weiß, welchen µC und welche Programmiersprache du einsetzt, werde ich nicht weiter darauf eingehen.

Inzwischen habe ich noch ein paar Links zu diesem Thema gesammelt: http://halvar.at/elektronik/rs485/

mfg
Gerold
:-)

PS: Diesen Text werde ich wahrscheinlich in meine Website übernehmen. ;-)