Forum: Mikrocontroller und Digitale Elektronik Suche Bus: 10m lang und 20 Teilnehmer


von Peter (Gast)


Lesenswert?

Hallo,

ich will mehrere Slaves an einen Master hängen und suche nach einem 
geeigneten Bus-System, welches auch eine Länge von 10 bis 15 Metern 
mitmacht.

Oberstes Prinzip: Einfach und billig.

Ich habe an SPI gedacht (umgesetzt auf RS485), aber da muss ich die 
ganzen CS-Leitungen mitschleppen. Auch IIC ist wohl wenig geeignet, da 
hier die Umsetzung auf RS485 nicht funktioniert.

Also bleibt nur CAN (zu teuer) oder RS232 auf RS485 umgesetzt, falls ich 
das dann überhaupt muss (wegen der Kabellängen).

Vielleicht gibt es ja auch noch etwas anderes. Ich bin für jeden 
Vorschlag zu haben.

Danke, Peter

von Stefan (Gast)


Lesenswert?

Hallo Peter,

warum nimmst Du nicht direkt RS232?

Du könntest alle Teilnehmer parallel an den Bus hängen. Über die Payload 
werden die einzelnen Teilnehmer adressiert. Nötig wäre in diesem 
Szenario allerdings ein Master der den Clients "Rede-Rechte" zuweist.

Spricht etwas dagegen?

Vg
Stefan

von Roland P. (pram)


Lesenswert?

RS232 ist nur point to point fähig. Man könnte aber eine Art Token Ring 
bauen. Ich würde es mit RS485 machen (Bei der Treiberwahl darauf 
achten, dass deine 20 Teilnehmer abgedeckt sind.)

Gruß Roland

von thomas (Gast)


Lesenswert?

>> warum nimmst Du nicht direkt RS232?

>> Spricht etwas dagegen?

Ja, es ist nicht als Bus-System geeignet.
RS485 ist genau für sowas konzipiert.

von Marcel P. (Gast)


Lesenswert?


von Frank K. (fchk)


Lesenswert?

Peter schrieb:

> Also bleibt nur CAN (zu teuer) oder RS232 auf RS485 umgesetzt, falls ich
> das dann überhaupt muss (wegen der Kabellängen).

Wieso ist CAN zu teuer?

Wenn ich bei Digikey schaue:
PIC18F25K80 im SSOP: 2.42€ bei 25 Stück
MCP2561 SO08: 0.73€ bei 25 Stück
Summe: 3.15€

Alternativ: LPC11C24: 3.95€ bei 25 Stück

Wie billig solls denn werden?

von Di P. (drpepper) Benutzerseite


Lesenswert?

http://www.omnibusrevue.de/neuer-10-m-reisebus-von-buessing-825974.html

Da gehen (mit Stehplätzen) vielleicht sogar bis zu 80 Teilnehmer rein :D

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

thomas schrieb:
> RS485 ist genau für sowas konzipiert.

Um das zu präzisieren, weil der TO schon an SPI-over-RS485 bzw. 
I2C-over-RS485 nachgedacht hat:

Gemeint ist hier UART (nicht RS232) an RS485-Transceiver.

: Bearbeitet durch Moderator
von Joachim B. (jar)


Lesenswert?

warum nicht onewire 1w?

bei mir hängen

temp<\r>
temp -> zeige alle Temperaturen <\r>
<\n>282e075503000057 +20,8?C, Wohnzimmer,     Bus:#1, N:136, M:4, P:80 
<\r>
<\n>284dc793030000df +19,9?C, Schlafzimmer,   Bus:#1, N:136, M:4, P:76 
<\r>
<\n>2893d4930300003a +20,8?C, kl. Zimmer,     Bus:#1, N:136, M:4, P:80 
<\r>
<\n>288bd19303000012 +24,8?C, Z?hlerschrank,  Bus:#1, N:136, M:4, P:96 
<\r>
<\n>28cde10004000042 +15,5?C, Balkon,         Bus:#1, N:136, M:4, P:60 
<\r>
<\n>2860f29303000075 +21,5?C, Wohnzimmer warm,Bus:#1, N:136, M:4, P:84 
<\r>
<\n>0000000000000000<\r>
<\n>Ready<\r>

6 Tempsensoren an ca. 50m Stern Bus gemischt

gibt viele Teile in onewire 1w

https://www.mikrocontroller.net/part/DS2405
http://www.maximintegrated.com/en/products/comms/one-wire.html
https://de.wikipedia.org/wiki/1-Wire
https://www.google.de/search?q=onewire&ie=utf-8&oe=utf-8&gws_rd=cr&ei=_iOBVZfbFees7AaY_IAo#q=one+wire+aktor
https://www.google.de/search?q=onewire&ie=utf-8&oe=utf-8&gws_rd=cr&ei=_iOBVZfbFees7AaY_IAo#q=onewire+sensoren
https://www.google.de/search?q=onewire&ie=utf-8&oe=utf-8&gws_rd=cr&ei=_iOBVZfbFees7AaY_IAo#q=onewire+schalter

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Joachim B. schrieb:
> warum nicht onewire 1w?

Weil der TO komplett offengelassen hat, was für Slaves er an den Bus 
hängen will. Daraus kann man eigentlich nur folgern, dass es sich um 
selbst zu entwickelnde Slaves handelt. Denn wenn der TO wüsste, welche 
Slaves er an den Bus hängen wollte, wäre der Typ des Busses ja schon 
klar vorgegeben.

OneWire Slaves selbst zu programmieren würde ich mir nicht antun, da das 
Timing ziemlich heftig ist. Oder gibt es bereits generische 
OneWire-Transceiver in Hardware gegossen, die man einfach an den µC 
anflanscht?

Tja, jetzt geht das Rätselraten wieder los. Der TO hat zwar die Länge 
des Busses genannt, aber weder etwas zur notwendigen 
Datengeschwindigkeit und Datenmenge gesagt noch erzählt, was das 
überhaupt für Slaves sein sollen.

: Bearbeitet durch Moderator
von Stefan (Gast)


Lesenswert?

Single-Master ist doch prädestiniert für RS485. Und das ist eine sehr 
billige Option.
CAN ist auch ganz gut geeignet, falls die verwendeten Controller bereits 
ein CAN-Modul besitzen.

Welche Datenrate wird denn angestrebt?

Gruß, Stefan

von m.n. (Gast)


Lesenswert?

Frank M. schrieb:
> Tja, jetzt geht das Rätselraten wieder los. Der TO hat zwar die Länge
> des Busses genannt, aber weder etwas zur notwendigen
> Datengeschwindigkeit und Datenmenge gesagt noch erzählt, was das
> überhaupt für Slaves sein sollen.

So ist es, aber die passenden Lösungen werden schon ausgelost ;-)
Für Übertragungsgeschwindigkeiten bis 115 kBd wären RS485 Treiber im 
Halbduplexbetrieb mit Multiprozesser-Protokoll mein Vorschlag. Auch 
CAN-Bus Treiber würden sich anbieten, ebenfalls per UART betrieben.

von Joachim B. (jar)


Lesenswert?

Frank M. schrieb:
> OneWire Slaves selbst zu programmieren würde ich mir nicht antun,

ich auch nicht, soll aber fertiges geben

Frank M. schrieb:
> Oder gibt es bereits generische
> OneWire-Transceiver in Hardware gegossen, die man einfach an den µC
> anflanscht?

keine Ahnung könnte sein, ich habe ja meine Timming "Problemchen" so pö 
a pö selber beim Master ausgeräumt da ich ja parasitär speise, zuerst 
ging es mit 5 Busse an 5 Ports, dann habe ich die zurückgebaut bis alle 
Busse nun "illegal" als Stern am einen Port hängen.

läuft seit Jahren so ca. 5 Jahre mit derselben Software.

von Johnny B. (johnnyb)


Lesenswert?

Zuverlässig, kostengünstig und einfach umzusetzen: LIN Bus
https://ess.cs.tu-dortmund.de/Teaching/PGs/autolab/seminarfolien/Meier-LIN.pdf
Unterstützt aber von Haus aus nur 16 Busteilnehmer.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Joachim B. schrieb:
> ich habe ja meine Timming "Problemchen" so pö
> a pö selber beim Master ausgeräumt [...]

Beim Master ist es einfach: dieser kann ja selbst entscheiden, wann er 
gerade Zeit hat, seine Slaves abzuklappern. Aber ein Slave muss immer 
verfügbar sein, egal wie "tief" er gerade in seinen Interrupts hängt, 
die er nebenbei so abklappern muss. Bei UART an RS485 ist das überhaupt 
kein Problem. Bei OneWire kann es aber ziemlich kritisch werden.

von Peter (Gast)


Lesenswert?

Erstmal Danke für die vielen Antworten!

Frank M. schrieb:
> Tja, jetzt geht das Rätselraten wieder los. Der TO hat zwar die Länge
> des Busses genannt, aber weder etwas zur notwendigen
> Datengeschwindigkeit und Datenmenge gesagt noch erzählt, was das
> überhaupt für Slaves sein sollen.

Es sollen Mikrocontroller angeschlossen werden (ATmega oder ATtiny). Die 
sollen dann vom Master alle paar Sekunden ein paar Dutzend Bytes 
erhalten (Übetragungsrate wenige kHz), um dann einige wenige Daten 
wieder an den Master zurück zu senden.

Stefan schrieb:
> warum nimmst Du nicht direkt RS232?

Bzgl. RS232/UART: Kann ich den Bus evtl. komplett als RS485 aufbauen und 
dann z. B. nach jedem Meter mit einer kurzen Stichleitung und 
Pegelumsetzer einen AVR/Attiny über UART anhängen? Alle hören mit und 
das erste Byte gibt an, welcher Controller adressiert ist.

Frank K. schrieb:
> Wieso ist CAN zu teuer?

Nicht zu teuer, aber aufgrund der ATmega/ATtiny fehlt die Hardware.

Joachim B. schrieb:
> warum nicht onewire 1w?

Ich denke, an Leitungen muss ich nicht sparen (abgesehen von den SPI 
CS).

Mittlerweile habe ich auch mal etwas gegoogelt und folgende Chips 
gesehen:
http://www.reichelt.de/P-82B715-TD/3/index.html?&ACTION=3&LA=446&ARTICLE=70074&artnr=P+82B715+TD&SEARCH=P82B715

Evtl. nehme ich sowas oder eben UART auf RS485.

Peter

von Dietrich L. (dietrichl)


Lesenswert?

Peter schrieb:
> Bzgl. RS232/UART: Kann ich den Bus evtl. komplett als RS485 aufbauen und
> dann z. B. nach jedem Meter mit einer kurzen Stichleitung und
> Pegelumsetzer einen AVR/Attiny über UART anhängen? Alle hören mit und
> das erste Byte gibt an, welcher Controller adressiert ist.

Ja, genau so wird das gemacht. Bei niedriger Übertragungsrate sind 
Stichleitungen auch kein Problem.

Gruß Dietrich

von Harald W. (wilhelms)


Lesenswert?


von Dietrich L. (dietrichl)


Lesenswert?

Peter schrieb:
> Alle hören mit und
> das erste Byte gibt an, welcher Controller adressiert ist.

Wenn die Übertragungssicherheit sehr wichtig ist, sollte das 1. Zeichen 
im Datenstrom eindeutig sein, d.h. man sollte ein zusätzliches 
Startzeichen spendieren. Am einfachsten geht das, wenn man die Daten 
ASCII-codiert. Nebenbei kann man zum Testen dann auch einfach an der 
Leitung mit einem Terminal-Programm mithören.

Gruß Dietrich

von Ralf G. (ralg)


Lesenswert?

Peter schrieb:
> Evtl. nehme ich sowas oder eben UART auf RS485.

Genauso wird das gemacht.
Der Klassiker (incl. failsafe):
http://www.reichelt.de/MAX-485-CSA/3/index.html?&ACTION=3&LA=446&ARTICLE=39600&artnr=MAX+485+CSA&SEARCH=max485

Peter schrieb:
> Alle hören mit und
> das erste Byte gibt an, welcher Controller adressiert ist.

Gibt's sozusagen fertig. Nennt sich "Multi-processor Communication 
Mode".

von Stefan (Gast)


Lesenswert?

Für diese Eckdaten ist RS485 ideal.

Nimm Deine Tiny/Atmega, baue vor den internen UART einen RS485-Treiber, 
z.B. für 1,20€ bei Reichelt:

http://www.reichelt.de/MAX-485-CSA/3/index.html?&ACTION=3&LA=446&ARTICLE=39600&artnr=MAX+485+CSA&SEARCH=rs485

Dann hängst Du sie alle nacheinander an ein Kabel. Bei niedrigen 
Baudraten sind auch Stichleitungen kein Problem. Vorne und hinten einen 
Abschlußwiderstand. Bei niedrigen Baudraten und Stichleitungen 
funktioniert auch Zentralterminierung.

Als Protokoll ASCII, macht das mitlesen sehr einfach. Jede Slave 
antwortet nur dann, wenn er dazu vom Master aufgefordert wird. Damit 
wird das Protokoll sehr einfach.

Von IIC über lange Strecken halte ich persönlich nichts, auch wenn 
einige Leute das schon erfolgreich praktiziert haben. IIC ist von der 
Grundidee ein geräteinterner Bus.

Gruß, Stefan

von Eric (Gast)


Lesenswert?

Ralf G. schrieb:
> Peter schrieb:
>> Alle hören mit und
>> das erste Byte gibt an, welcher Controller adressiert ist.
>
> Gibt's sozusagen fertig. Nennt sich "Multi-processor Communication
> Mode".

Oder LIN (https://de.wikipedia.org/wiki/Local_Interconnect_Network)

von Joachim B. (jar)


Lesenswert?

Stefan schrieb:
> Von IIC über lange Strecken halte ich persönlich nichts, auch wenn
> einige Leute das schon erfolgreich praktiziert haben. IIC ist von der
> Grundidee ein geräteinterner Bus.

sehe ich auch so, nur wer hat I2C gesagt?

ich sagte 1w oder onewire.

von Joachim B. (jar)


Lesenswert?

Roland Praml schrieb:
> RS232 ist nur point to point fähig.

Peter schrieb:
> Es sollen Mikrocontroller angeschlossen werden (ATmega oder ATtiny). Die
> sollen dann vom Master alle paar Sekunden ein paar Dutzend Bytes
> erhalten (Übetragungsrate wenige kHz), um dann einige wenige Daten
> wieder an den Master zurück zu senden.

Peter schrieb:
> Ich denke, an Leitungen muss ich nicht sparen (abgesehen von den SPI
> CS).

Netzwerk(Leitungen) ginge auch, ein Cat Kabel hat etliche Adern und geht 
auch seriell. (Alternative 32 oder mehrpolige Telefonkabel 10m sind ja 
nicht lang und 20 Teilnehmer brauchen nur 40 Adern)

Entweder jeder ATmega oder Tiny bekommt seine 2(3) RS232 Strippen mit 
Pegelwandler V24 oder alle arbeiten auf einen Netwerkserver Sharkoon
http://www.sharkoon.com/?q=de/node/1797
http://www.sharkoon.com/?q=de/node/1239

an USB RS232 Umsetzer, so kann ich den abgesetzten Webserver (Atmel) 
auch resetten oder umprogrammieren.

Mehrfach RS232 Karten gibt es auch zu Hauf oder genügend USB RS232 
Umsetzer anschliessen.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Peter schrieb:

> Frank K. schrieb:
>> Wieso ist CAN zu teuer?
>
> Nicht zu teuer, aber aufgrund der ATmega/ATtiny fehlt die Hardware.

Die musst Du ja nicht nehmen, wenn sie für dieses Projekt nicht geeignet 
sind. Die (leicht verfügbaren) Alternativen habe ich Dir ja aufgezeigt.

fchk

von Tom A. (toma)


Lesenswert?

Hallo Peter,

deine Aufgabe schreit förmlich nach RS485. Das ist ein Halb-Duplex 
Master-Slave-System, das problemlos funktioniert (bis 10MBaud, bis 
1,2km). Da braucht es keine "CS-Leitung". Es gibt die beiden Leitungen 
D+ und D-, die werden einfach zu allen Teilnemern durchgeschleift.
In Ruhe ist der Master Sender, alle Slaves sind Empfänger. Der 
Datenaustausch geht immer vom Master aus, er adressiert den Empfänger. 
Wenn der Master Daten anfordert weiß er das und schaltet um auf Empfang, 
der adressierte Slave schaltet auf senden.

CAN ist ein Multimaster-System, lauter gleichberechtigte Teilnehmer. Da 
darf jeder senden, wann es ihm wichtig erscheint. Es können auch zwei 
Nachrichten gleichzeitig auf den Bus gelangen (Kollision) und dann 
müssen Mechanismen her, damit umzugehen.

LIN hat Vorteile im Auto, die +12V und die Rückleitung sind dort überall 
vorhanden. Bei deinen µC mußt du die Bedingungen erst schaffen und hast 
dann trotzdem ein störanfälligeres System als RS485.

Aus meiner Sicht ist hier RS485 am geeignetsten. Mache dich einfach über 
die vorgeschlagenen Feldbusse schlau (Wikipedia) und entscheide dann 
selbst, nach deinen Bedingungen.

Gruß. Tom

von RS485 (Gast)


Lesenswert?

Von Intel gibt es ein Protokoll, dass sich "Multiprocessor 
communication" schimpft.
Im Prinzip ist es ein Multimaster Serial Bus und funktioniert so:

- Alle Teilnehmer stellen ihren UART auf Empfangen
- Ein Master startet das Senden indem er 9(!)Bit sendet (z.B. die ID des 
Teilnehmers)
- Das führt auf den Slaves zu einem Framing-Error-Interrupt und jeder 
Slave kann anhand der ID feststellen ob er angesprochen wurde.
- Wenn nein, verlässt er den Interrupthandler und wartet auf das nächste 
9Bit Datum.
- Wenn ja sendet/empfängt er 8Bit Datenpakete

Mit RS485 Treibern geht das auch über längere Strecken.
Ich habe das früher mal in einer industriellen Produktionsmaschine 
eingesetzt. Dort hatten wir ca. 20 Teilnehmer auf ca. 5m verteilt in der 
Anlage sitzen. Der Bus-Kabelstrang dürfe mehr als 10m lang gewesen sein.

Man braucht noch ein Protokoll, das z.B. regelt, wie lange die 
Datenpakete sind und das verhindert, dass zwei Master gleichzeitig 
senden wollen.

Manche UARTs haben einen gewissen Support für dieses Protokoll und 
können z.B. die 9Bit-Adresse schon in HW vergleichen und nur bei 
Übereinstimmung überhaupt einen Interrupt auslösen.

z.B. 8051 UART:
The next bit, SM2, is a flag for "Multiprocessor communication." 
Generally, whenever a byte has been received the 8051 will set the "RI" 
(Receive Interrupt) flag. This lets the program know that a byte has 
been received and that it needs to be processed. However, when SM2 is 
set the "RI" flag will only be triggered if the 9th bit received was a 
"1". That is to say, if SM2 is set and a byte is received whose 9th bit 
is clear, the RI flag will never be set. This can be useful in certain 
advanced serial applications. For now it is safe to say that you will 
almost always want to clear this bit so that the flag is set upon 
reception of any character.

Im Netz findet sich einiges darüber.

von Lutz (Gast)


Lesenswert?

Tom Amann schrieb:
> CAN ist ein Multimaster-System, lauter gleichberechtigte Teilnehmer. Da
> darf jeder senden, wann es ihm wichtig erscheint. Es können auch zwei
> Nachrichten gleichzeitig auf den Bus gelangen (Kollision) und dann
> müssen Mechanismen her, damit umzugehen.

Wie man CAN nutzt, ist ja jedem selbst überlassen. Man muß es ja nicht 
als Multimastersystem nutzen. Und Kollisionen sind schon im Protokoll 
geregelt. Das ist ja gerade das Schöne.

von Frank K. (fchk)


Angehängte Dateien:

Lesenswert?

Und so könnte ein CAN-Knoten aussehen.

fchk

von m.n. (Gast)


Lesenswert?

RS485 schrieb:
> - Ein Master startet das Senden indem er 9(!)Bit sendet (z.B. die ID des
> Teilnehmers)

Nein, er sendet 11 Bits und alle Anderen senden auch immer 11 Bits!
Neben Start, Stopp, 8 x Datenbits wird das 9. Bit als '1' übertragen, um 
die gesendeten 8 Bits als Adresse auszuweisen UND bei allen 
angeschlossenen Empfängern einen Interrupt auszulösen. Bleibt das 9. Bit 
auf '0' handelt es sich um normale Daten.
Auf das Multiprozessor-Protokoll hatte ich schon um Uhr 10:00 
hingewiesen; es sollte allgemein bekannt sein ;-)

von Rudolph R. (rudolph)


Lesenswert?

Peter schrieb:
> Nicht zu teuer, aber aufgrund der ATmega/ATtiny fehlt die Hardware.

Wie jetzt? ATMega16M1 - 32 Pin TQFP.

von Gableberger (Gast)


Lesenswert?

RS485 2 oder 4 wire
und Modbus

von grundschüler (Gast)


Lesenswert?

1 wire, wie ds1820

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

grundschüler schrieb:
> 1 wire, wie ds1820

Hättest Du den Thread komplett gelesen, hättest Du erkannt, dass OneWire 
schon lange vom Tisch ist. Der TO will eigene Clients an den Bus 
hängen und keinen DS1820 oder irgendeine andere fertige 
OneWire-Hardware.

: Bearbeitet durch Moderator
von Peter D. (peda)


Lesenswert?

Man kann auch CAN-Transceiver (MCP2551) an die UART hängen.

Das Protokoll ist dann wie bei RS-485, hat aber den Vorteil, man braucht 
keine Richtungsumschaltung und es gibt keine Kollisionen (hoher 
Stromverbrauch, wenn 2 Transceiver gegeneinander treiben).

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.