Forum: Mikrocontroller und Digitale Elektronik Module miteinander verbinden - welchen Bus nehmen?


von Peter M. (peter_m94)


Lesenswert?

Hallo,

Hab da eine Projektidee von einem Künstler (Installation) bei der 
mehrere Module (uC STM32, Display, Taste) miteinander verbunden werden 
sollen. Die Module sind nicht weit auseinander, vielleicht max. einem 
Meter. Es sollen aber schon gut 50 Stück möglich sein. Beim Start des 
Systems soll eine Enumerierung stattfinden. Der Master numeriert die 
Module durch, damit jedes anhand seiner physischen Position in der Kette 
adressiert werden kann.

Es soll eine vom Master gesteuerte Slideshow (640x480, evtl. JPEG) 
gesendet werden können. Allerdings kommen immer neue Bilde vom Master, 
weswegen eine Vorab-Speicherung in dem Modulen flach fällt. Der Master 
soll also überall einzeln Bilder "hochladen" können. Ich denke ein paar 
MBit/s wären also ganz gut.

Jetzt dachte man schon daran, weil ja 2 SPIs pro uC vorhanden sind, ob 
man nicht einfach einen SPI für IN und einen weiteren für OUT nehmen 
soll und so die Kette bilden könnte.

Klar, das dauert etwas bis ein Bild bis ganz hinten transferriert 
wird... muss ja auch nicht in Echtzeit sein, wenn es ein paar 100ms 
dauert, egal.

Und als Verkabelung soll auch ein Standard genommen werden, damit es 
nicht zu teuer wird und man nicht jedes Kabel selbst löten muss.

Aber SPI.. hatte eigentlich gleich an RS485 gedacht. Das braucht aber 
wieder extra Receiver/Transmitter pro Modul, wäre aber technisch wohl am 
saubersten (symmetrisch zusammen mit Ethernetkabel z.B.)

Hat jemand alternative Vorschläge wie man sowas einfach lösen könnte?

: Bearbeitet durch User
von Markus (Gast)


Lesenswert?

SPI sollte das PCB eigentlich nicht verlassen, daher ist die Idee, einen 
anderen Übertragungsstandard für die Verbindung der Module zu nehmen, 
schon richtig.
Da du ohnehin vorhast, für die INs und OUTs separate Schnittstellen zu 
verwenden, ist RS485 in meinen Augen fast ein wenig überdimensioniert 
(das Multipoint-Feature wird bei dieser Art der Verkabelung nicht 
benötigt).
Man könnte es mit RS232 versuchen oder sogar mit den 3V-USARTS der 
Controller (+ zusätzlichem Schirm), dann wären gar keine separaten 
Transceiver notwendig.
MBit/s wirst du damit natürlich nicht erreichen, dafür ist es am 
einfachsten aufzubauen.
Man bekommt halt nichts geschenkt ;)

von Bernd K. (prof7bit)


Lesenswert?

Markus schrieb:
> SPI sollte das PCB eigentlich nicht verlassen,

SPI ist schon ok, das ist niederohmig. Du meinst wahrscheinlich I2C, das 
ist etwas anfälliger bei langen Leitungen.

von H.Joachim S. (crazyhorse)


Lesenswert?

Treiber irgendwelcher Art wirst du sowieso brauchen, also nimm doch 
gleich die für RS485, ist schon die richtige Wahl. Und die kosten auch 
kein Vermögen :-)

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Warum nicht direkt Ethernet und als Controller Raspberrys oder 
ähnliches?

von Stefan F. (Gast)


Lesenswert?

Bei RS485 kann man aber die physische Position nicht zum Enumerieren 
benutzen.

von Markus (Gast)


Lesenswert?

Stefanus F. schrieb:
> Bei RS485 kann man aber die physische Position nicht zum Enumerieren
> benutzen.

Wenn man, wie von OP beschrieben, je einen Port für IN und OUT verwenden 
will, geht das auch. Wie schon gesagt, ich finde es aber 
überdimensioniert.

von Peter M. (peter_m94)


Lesenswert?

Danke schonmal für das rege Feedback:

Ethernet müsste man wieder sternförmig verteilen.
RPI mag ich in diesem Fall nicht, weil ewiges booten, SD Karten-Gefummel 
und riesen SW-Overhead.

RS485 würde nicht im klassischen Sinne als Bus sndern nur jeweils 
Peer-to-Peer  betrieben.

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Also ich bin selber kein Freund der Raspberrys, aber ein Zero WH mit nem 
Buildroot basierten System bootet in 5 Sekunden, passt auf ne 64 MB 
Karte und per Wlan entfallen auch die Kabel...

Achja, die SD Karten können nach dem Booten auch raus.

: Bearbeitet durch User
von Eric B. (beric)


Lesenswert?

Peter M. schrieb:
> Klar, das dauert etwas bis ein Bild bis ganz hinten transferriert
> wird... muss ja auch nicht in Echtzeit sein, wenn es ein paar 100ms
> dauert, egal.

640x480 = 307200 pixel, 3 bytes (RGB) pro pixel ergibt dann fast 1MB. 
Wenn das in 1/10 Sekunde durchlaufen soll, brauchst du also schon 8 bis 
10MB/s, oder halt irgendein komprimiertes Format - JPG, PNG...

von Peter M. (peter_m94)


Lesenswert?

Ja Eric, da hast du schon recht, das wird viel - unkomprimiert. Ich 
denke mal, daß die Bilder schon als JPEG oder PNG reinkommen und die 
STM32 die wir da nehmen werden, die schaffen das dann schon in 
nützlicher Zeit wieder zu dekomprimieren.

von Peter D. (peda)


Lesenswert?

Bernd K. schrieb:
> SPI ist schon ok, das ist niederohmig. Du meinst wahrscheinlich I2C, das
> ist etwas anfälliger bei langen Leitungen.

Es ist genau umgekehrt. I2C filtert die Eingänge mit einem Tiefpaß gegen 
schnelle Störflanken und ist daher unempfindlich gegen 
Leitungsreflexionen und Übersprechen.

von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

Nimm doch CAN. CAN Bus ist im STM32 schon drin und kommt mit 50 nodes 
zurecht. Das CAN Protokoll kann mit Kollisionen umgehen, wenn mehrere 
Nodes gleichzeitig senden wollen. Du brauchst allerdings noch zusätzlich 
einen Transceiver Chip in jedem Node.

CAN hat bis zu 300 MHz (http://www.bittiming.can-wiki.info)

Wenn Du wirklich nur einen Sender und 50 Empfänger hast, dann kannst Du 
auch einige helle LEDs auf die Platinen leuchten lassen (IR oder 
sichtbares Licht) und jeden Knoten mit einem Photoempfänger ausstatten. 
So kommst Du auf wirklich hohe Übertragungsraten.

See: https://de.wikipedia.org/wiki/Li-Fi

Bleibt noch 10BASE2 Thin Ethernet. Das hat auch eine Ringtopologie, aber 
ich befürchte, das wird kaum noch unterstützt.

Oh, oh, and DMX of course, but it may be to slow for sending jpegs.

https://en.wikipedia.org/wiki/List_of_network_buses

: Bearbeitet durch User
von Peter M. (peter_m94)


Lesenswert?

Danke an alle für die rege Beteiligung.

SPI: Einen Tiefpass könnte man auch selber vor den SPI-Eingangspin 
bauen.

I2C: Der High-Level wird bei I2C durch den Pull-Up-Widerstand erzeugt. 
So gesehen, ist nur der "L"-Zustand niederohmig, wohingenen "H" durch 
den Pull-Up-R definiert wird (z.B. mit 4,7k).

Von daher finde ich den SPI fast besser, weil H/L => Push-Pull. 
Allerdings müsste man da die schnellen Flanken durch serielle Rs 
dämpfen, sonst "klingelt" das Signal schnell mal. Es bleibt aber ein 
asymmetrisches Signal.

WLAN: bringt mir keine Enumerierung wenn neu aufgebaut wird. Beim 
Erweitern bzw. Umbau muss wieder was mit dem AP gekoppelt werden. Dann 
muss geschaut werden, welche IP ist jetzt wo. Zudem WLAN kann schon 
recht dicht sein am Austellungsort, da muss man evtl. die 
Kanalauslastung checken. Ja klar könnte man machen und würde schon 
funktioneren, aber seriell wäre doch einfacher und zuverlässiger. 
Zusammenstecken wäre jeder Zeit in beliebiger Reihenfolge möglich. N

CAN hatte ich mir auch schon überlegt. Aber auch hier: wenn alle am Bus 
hängen, wie numeriere ich das durch. Wenn dann auch mit Peer-2-Peer CAN. 
Da gewinne ich nicht viel gegenüber UART/RS422 oder 485.

Das mit dem LED-Prinzip ist noch interessant, nur bedingt das halt, daß 
alle Empfänger den Sender immer sehen kann. Das kann ich leider nicht 
garantieren, weil ich nicht weiss, wie der die Teile anordnen will (in 
welcher Form).

von Tom (Gast)


Lesenswert?

CAN ist gut, aber kann keine automatische Enumeration nach 
Verkabelungsreihenfolge.

Wäre es denkbar, beim ersten Einschalten nach dem Auf-/Umbau die Kette 
abzulaufen und jeweils den Knopf drücken und so die Module manuell zu 
enumerieren und das im EEPROM speichern zu lassen?

von Stefan F. (Gast)


Lesenswert?

Peter M. schrieb:
> wenn alle am Bus hängen, wie numeriere ich das durch.

Mit Kodierschaltern. 
https://www.conrad.de/de/kodierschalter-hexadezimal-0-9a-f-schaltpositionen-16-hartmann-hex-codierschalter-1-st-705462.html

Die kannst du im Grunde genommen bei jeder Art von Bus zum festlegen der 
Adresse verwenden, auch bei Ethernet/WLAN.

Ist es denn wirklich sinnvoll, sie automatisch fortlaufend durch zu 
nummerieren? Was ist, wenn ein Modul defekt ist, sollen sich dann alle 
Nummern um 1 verschieben?

von Max D. (max_d)


Lesenswert?

Für diese Geschwindigkeit kommst du bei keinem System um Terminierung 
rum.
Entweder lässt man was RS485 verwandtes p2p laufen und schaufelt intern 
die Daten oder Signale rüber oder man hat einen zweiten, langsamen Bus 
der die Teilnehmer bequem enumeriert und danach die Bildübertragung dem 
schnellen Bus überlässt. HDMI und VGA fahren z.B. ein I2C neben den 
Bilddaten her für einen ähnlichen Zweck (dort halt ohne Enumeration 
mehrerer Teilnehmer).

von Schlumpf (Gast)


Lesenswert?

Ich denke auch, dass CAN hier das Mittel der Wahl ist.
Und auf der Leiterplatte findet sich bestimmt noch ein Plätzchen für den 
Transceiver.

Hast dir schon Gedanken über die Versorgung gemacht?

Angenommen jedes Modul verbrät nur 1W, dann musst du 50W bereitstellen.

Du musst also mit der Spannung hoch, wenn du nicht dicke Kabel zu den 
Modulen willst.
Also muss auf jedes Modul noch ein Buck-Converter.

Ich nehme an, das ganze soll dann irgendwie steckbar sein. Da wäre es ja 
schön, man könnte alles in einer Leitung führen und auf Standards zurück 
greifen wie zB Ethernet Patchkabel oder M8 oder M12 Verbinder.

Für die Vergabe der Adressen wirst vermutlich noch ein Hilfssignal 
benötigen, über welches selektiert wird, welche Node gerade ihre Adresse 
bezieht.

von Thomas (kosmos)


Lesenswert?

was spricht denn dagegen, die 50 nummerierten Module in der richtigen 
Reihenfolge anzuklemmen?

Ich würde die Daten entweder im Vorraus übertragen, diese müssten dann 
halt zwischengespeichert werden z.B. in einem 
http://www.microchip.com/wwwproducts/SST26WF080BA/documents

Der Master muss dann nur ein Startsignal schicken bzw. das ganze 
synchronisieren.

Aber das ist ne ganz schöne Materialschlacht.

von Schlumpf (Gast)


Lesenswert?

Ist doch viel eleganter, wenn man sie einfach wahllos aus der Kiste 
nehmen und zusammenstecken kann, oder?

von Peter M. (peter_m94)


Lesenswert?

Da ganze soll halt möglichst "Idiotensicher" sein und wir wohl immer 
wieder aufgebaut und wieder zusammengesteckt, je nach Austellungsort 
wohl mit mehr oder weniger Modulen.

wenn ein Modul defekt ist (oder einfach keins mehr kommt), dann muss das 
der Master erkennen und weitermelden (Debug Port oder Service Display) 
Der Master kann dann sagen, hey ich kann nur bis 10 adressieren, danach 
kommt nichts mehr. Dann weiss man gleich Modul an Stelle 11 (oder die 
Verbindung dorthin) wird defekt sein.

>Hast dir schon Gedanken über die Versorgung gemacht?

Ja ist auch so ein Thema. Die Ethernetkabel müsste man da wohl mit etwas 
mehr Spannung fahren. Soweit ich weiss geht da max 1A per Adernpaar und 
ich hätte nur 2 (485) bzw. 3 (CAN) davon frei..

>Ethernet Patchkabel oder M8 oder M12 Verbinder

Die habe ich aber auch nur bis 0,34mm2 gesehen.. und mehr als 48V wollte 
ich eigentlich nicht einsetzen.

von Schlumpf (Gast)


Lesenswert?

Weißt du schon was Konkreteres über die die zu erwartende 
Leistungsaufnahme pro Modul?
Denn wenn du da grob daneben liegst kann passieren, dass das ganze 
Konzept für den A... ist

von Andre (Gast)


Lesenswert?

Schaltest du die Module alle hintereinander?
Dann könntest du eine zusätzliche Adressierungs-Leitung zwischen den 
Modulen verlegen:

(Master) Out -> In (Modul 1) Out -> In (Modul 2) Out -> ...

Die Eingänge bekommen einen Pulldown und Schmitt-Trigger. Der Master 
sendet beim Einschalten eine Nachricht: "Wer jetzt eine steigende 
Flanke sieht ist Modul 1" und gibt einen Impuls am Ausgang.
Modul 1 sieht die steigende Flanke, adressiert sich auf "1" und schaltet 
die Adressierungs Ein- und Ausgänge über ein kleines 74LVC1G08 zusammen.
Weiter gehts: "Wer jetzt eine steigende Flanke sieht ist Modul 2", der 
Impuls rauscht durch das Und-Gatter an Modul 1 vorbei und Modul 2 kann 
sich adressieren.

Durch die Logikgatter hat jeder Abschnitt Adressierungs-Leitung einen 
eigenen Treiber mit niedriger Laufzeit. Das kann man auch sehr elegant 
zum synchronisieren der Show nutzen, indem der Master darüber einen 
langsamen Takt verteilt.
Für dieses Signal wäre es IMHO auch vertretbar auf spezielle 
Leitungstreiber zu verzichten.

von Frank K. (fchk)


Lesenswert?

Meine Idee:
- RS422 vollduplex.
Hier gibt es Sender und Empfänger, die locker 10 MBit/s Datenrate und 
mehr können. Bei so etwas ist ein AVR raus, da brauchst Du einen ARM 
oder MIPS (PIC32) mit DMA und geeigneten UARTs. Früher hätte man da 
Zilog ESCCs mit HDLC genommen, aber das ist ja inzwischen aus der Mode 
gekommen. Damit ist zumindest genug Bandbreite für irgendwelche Bitmaps 
etc vorhanden.
PIC32 kann seine UARTs mit 20 MBit/s fahren, bei STM32 ist bei 4.5MHz 
Schluss. TIVA 4C geht bis 10 MHz.

Du kannst Dir überlegen, ob Du nur Point2Point-Verbindungen zwischen 
Nachbarn haben willst (dann muss jeder Slave Nachrichten, die nicht für 
ihn gedacht sind, weiterrouten), oder ob Du tatsächlich einen 
physikalischen Bus willst. Ein physikalischer Bus ist in der Gesamtlänge 
und von der Anzahl der Knoten begrenzt (bei vielen CAN und 
RS422/485-Transceivern auf 32!). Bei P2P kannst Du einen Ring bilden und 
Pakete in beide Richtungen des Rings senden, hast aber auch immer 
Latenzen bei jedem Hop.

- ConfigIn, ConfigOut Signal.
In der Enumerationsphase sind alle Knoten passiv. ConfigOut jedes Moduls 
ist low. Der Master setzt sein ConfigOut, das mit dem ConfigIn des 
ersten Slaves verbunden ist, fragt Identifikationsdaten ab und setzt die 
Slaveadresse. Mit dem Setzen der Slaveadresse verlässt der erste Slave 
den Konfigurationsmodus und setzt sein ConfigOut. Nun wird der nächste 
Slave konfiguriert etc etc. Das Ende ist erreicht, wenn keine gültigen 
Konfigurationsdaten mehr empfangen werden, oder - in einem Ring - wenn 
das ConfigOut wieder beim Master zurückkommt.

- Stromversorgung.
48V DC, Schaltregler in jedem Modul. 48V ist die höchste Gleichspannung, 
die noch als Sicherheitskleinspannung gilt, d.h. wo man noch ohne 
Berührschutz auskommt. Die Spannung willst Du so hoch wie möglich haben, 
um maximal viel Leistung darüber übertragen zu können. Daher arbeiten 
sowohl ISDN als auch PowerOverEthernet mit 48V. Bei halber Spannung 
(24V) bekommst Du nur noch ein Viertel der Leistung übertragen - das 
willst Du also nicht.

- Verkabelungssystem.
Hier würde ich auf etwas fertiges zurückgreifen. RJ45 wäre Preiswert, 
die 48V kämen dann extra noch dazu.

fchk

von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

Naja, beim CAN Bus kann zumindest jedes Modul eine eigene ID haben, so 
dass der Controller weiss, welche Module eingesteckt sind. Wenn Du dann 
sowieso Ethernet Patchkabel einsetzt, dann hast Du ja noch Adern frei. 
Eine davon kannst Du dann nutzen, um die Aufzählung über eine langsame 
5V serielle Leitung durchzuführen. In etwa so:

1 ---+--- +48V ----...
2 ---+
3 ------- CAN H ---...
4 ------- CAN L ---...
5 ------- ENUM TX ----- RX1 [MCU1] TX1 ---------- RX1 [MCU2] TX1 ------- 
etc.
6 ------- frei
7 ---+
8 ---+--- 48V GND -...

Der Hauptcontroller sendet per RS232 langsam (2400bps, da nur MCU VCC 
level und nicht differential) einen Wert an MCU1. Die empfängt diesen 
Wert und meldet ihn über den CAN Bus zurück an den Hauptcontroller, 
addiert 1, und sendet den neuen Wert an MCU2, usw. .

Alles can per Patchkabel verbunden werden. Wenn die Leistung nicht für 
alle Module reicht, dann kann man weitere Netzteile mitten drin 
hineinschleifen, ohne den Aufbau zu stören. Mit einer geschickten 
Belegung der Ethernetstecker kann der Aufbauer sogar den Patchkabel Ein- 
und Ausgang verwechseln, ohne die Funktion zu stören.

von Peter M. (peter_m94)


Lesenswert?

Ich vermute mit 1W pro Modul kommen wir nicht hin. Mehr als 5W werden es 
aber sicher nicht. Daher gehe ich mal von total max. 250W aus, die 
verteilt werden müssen.

Eine Kombination von Addressierleitung zusammen mit einem CAN Paar über 
simples JR54-Patchkabel und parallel noch eine dickere 2 Pol-Leitung für 
Spannungsversorgung. So könnte es wohl aussehen. Die Leitungen werden 
mit schwarzem Textilband eingewickelt. Das ist matt und da fällt es 
nicht auf ob  eine oder zwei Leitungen drin stecken...

von Schlumpf (Gast)


Lesenswert?

An sowas in der Art dachte ich auch.
Nur ein klein bisschen abgewandelt.

Alle Nodes haben nach Power On den Out auf Low.
Der Master zieht seinen Out auf High und schickt die zu vergebende 
Adresse auf den Bus.
Die Node mit High am Eingang (also die erste) übernimmt die Adresse und 
'merkt' sich, dass sie konfiguriert wurde.
Dann zieht sie ihren Ausgang auf High und der Master vergibt die nächste 
Adresse.
Usw...
Logik in der Node:
Siehst du am Eingang High und bist noch nicht konfiguriert, übernehme 
die empfangene Adresse, setze dich selbst auf konfiguriert und ziehe 
deinen Ausgang auf High.

Zum Thema Power:

Ein AWG23 Patchkabel hat ca 0,25 qmm pro Ader.
Das macht ca 70mOhm/m. Also 140mOhm für hin und rückweg.
Wären bei 1A grad mal 140mW im Kabel.
Nimmt man je ein Adernpaar, dann halbiert sich sogar der Wert.

Wenn ich mich nicht verrechnet habe, dann sollte das unkritisch sein

von H.Joachim S. (crazyhorse)


Lesenswert?

Was bringt denn hier CAN? Gar nichts. Datenrate deutlich geringer, 
heftiger overhead, nur kleine Datenpakete. Und den Riesenvorteil 
(kollisionsfreier Multimasterbetrieb) brauchst du hier gar nicht. Und 
bei 50m schaffst du nicht mal mehr 1Mbit. Automatische Adressierung in 
der Reihenfolge der phys. Anordnung geht auch nicht von alleine.
Eine zusätzliche Leitung die von Modul zu Modul geht, kann das 
Adressierungsproblem lösen und vom master können Adressen zugewiesen 
werden.

von Peter M. (peter_m94)


Lesenswert?

Das Problem bei der Stromversorgung ist halt, wenn ich alles in einer 
Kette anordne, dann mus das erste Kabel den maximalen Strom an alle 
Module tragen... Deswegen und weil das eben "schöner" ist, ohne 
zusätzliches Power Supply dazwischen, würde ich recht ordentliches 
Zweipol-Kabel mit 48V nehmen. Dann hab ich halt vier Stecker pro Modul: 
2x 2Pol (Norm weiss ich noch nicht) und 2x RJ54. Das wäre soweit OK.

von Peter M. (peter_m94)


Lesenswert?

H.Joachim, ja die 1m zwischen den Modulen ist nur ein Maximalwert. Der 
baut auch welche direkt nebeneinander. Allerdings kann das ganze Gebilde 
schon eine einige Meter Schlange sein.

also doch eher wie Anfangs gedacht... RS422/485

von Schlumpf (Gast)


Lesenswert?

H.Joachim S. schrieb:
> Was bringt denn hier CAN?

Du hast schon recht. Aber was schlägst du vor?
Ethernet wäre gut. Aber dann brauchst bei einer Ringtopo noch auf jeder 
Node nen Switch.

SPI, I2C ist auch nicht grad ideal wegen Störanfälligkeit.

Wegen Power:
Es gibt auch Kombistecker.. Aber sowas ist vermutlich nicht günstig und 
die Kabel musst sicher selbst konfektionieren

von H.Joachim S. (crazyhorse)


Lesenswert?

Peter M. schrieb:
> ja die 1m zwischen den Modulen ist nur ein Maximalwert
Und würdest du dann auch kürzere Verbindungskabel nutzen, wenn die 
direkt nebeneinander stehen? Also eine grosse Kiste mit verschieden 
langen patchkabeln für alle Eventualitäten?

von Hyper Mario (Gast)


Lesenswert?

Peter M. schrieb:
> Da ganze soll halt möglichst "Idiotensicher" sein und wir wohl immer
> wieder aufgebaut und wieder zusammengesteckt, je nach Austellungsort
> wohl mit mehr oder weniger Modulen.

Think simple.

Du kennst die Störungen nicht die in dein System reinfunken.
Bei 50 m baust du 2 Netze auf, eines davon ist das Störungsnetz.

Was spricht gegen Ethernet (evtl. mit Poe) und eine logische statt 
physikalische Adressierung? Schnell genug, störsicher, etablierte 
Protokolle und günstig Kabel und Komponenten gibt es auch überall vor 
Ort (das hat mir schon oft den Ar... gerettet). De Schnittstelle im 
Notebook ist auch schon da.

Wenn du die Adresse nicht mit Filzstift, Aufkleber oder Port Steckplatz 
festlegen willst wird bei der Inbetriebnahme halt ein Bild mit der 
Adresse angezeigt und du ordnest das kurz zu. Bei 50 Empfängern ist das 
flott gemacht, geht sogar mittels Vlan.

von H.Joachim S. (crazyhorse)


Lesenswert?

Schlumpf schrieb:
> Aber was schlägst du vor?

RS485.
Bei 50m funktioniert das auch mit Telefonkabel (RJ11 oder RJ12 mit 
Flachkabel)

Oder mal das uralte 10BASE2 wieder reaktivieren :-)

von Peter M. (peter_m94)


Lesenswert?

>Und würdest du dann auch kürzere Verbindungskabel nutzen, wenn die
direkt nebeneinander stehen?

Ja sicher so kurz wie möglich. Geht ja auch um die Optik :D
Mehr als 10m wird die Geschichte auch bei 50 St. nie.

>Du kennst die Störungen nicht die in dein System reinfunken.
Ja, RFI/EMV liegen mir bei derm Vorhaben eh schon im Magen.

>Was spricht gegen Ethernet
Solange ich es nicht sternförmig machen muss, also am ersten Modul 50 
Kabel entlangführen muss...

An Ethernet dachte ich auch schon, da die STM32 das ja eh schon drin 
haben (bis auf PHY) und mit in den in die Buchsen eingebauten 
Übertragern halt super galvanisch entkoppelt, das wäre schon was nur 
müsste ich bei der Anordnung auch wieder zwei ETH-Schnittstellen pro 
Modul haben...

von Peter M. (peter_m94)


Lesenswert?

>10BASE2

Das gute alte 10BASE2 und der Augenblick wenn man wiedermal beim Räumen 
ein duzend BNC T-Stücke findet und denkt... ja, so ging LAN damals als 
ich jung war :D

: Bearbeitet durch User
von Schlumpf (Gast)


Lesenswert?

H.Joachim S. schrieb:
> RS485.

Na ja, so richtig toll ist das aber auch nicht.
Regulär auch nur 32 Nodes möglich und die Datenrate knickt dir auch 
gehörig weg mit der Leitungslänge... hmm
Du meinst, dann sowas wie Modbus zusammenstricken?
Könnte klappen.

von Peter M. (peter_m94)


Lesenswert?

Wenn RS485, dann nicht als Bus, sondern peer-2-peer zwischen den 
Modulen. UARTS sind ja genug vorhanden in den Controllern. Klar gibts 
dann Delay durch jeden Node, aber wenn man die Transfers klein 
segmentiert...

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Peter M. schrieb:
> das wäre schon was nur
> müsste ich bei der Anordnung auch wieder zwei ETH-Schnittstellen pro
> Modul haben...

Dann nimm halt statt dem simplen PHY jeweils einen kleinen 
3-Port-Switch; z.B. sowas wie den KSZ8873.

Gruss
WK

von Schlumpf (Gast)


Lesenswert?

Peter M. schrieb:
> Klar gibts
> dann Delay durch jeden Node, aber wenn man die Transfers klein
> segmentiert werden...

könnte man evtl über DMA lösen.
Man darf halt nicht vergessen, dass der µC noch so ganz nebenbei ein 
Video abspielen und eventuell sogar dekomprimieren soll. Wenn er dann 
noch ständig von der UART zugeschissen wird, könnte das echt eng werden.

Angesichts des Aufwands und der Kosten, die in dem Projekt vergraben 
werden, würde ich glaub zu Ethernet tendieren.
Nen externen 3-Port-Switch neben den STM setzen (ca 4 Euro) und dann 
bekommt der µC nur das, was auch für ihn bestimmt ist und ist nicht 
damit beschäftigt, Daten von A nach B zu schaufeln.

Ich hätte echt ein bisschen Schiss, hier hunderte (oder tausende) von 
Euro in ein Projekt zu versenken, wo alles auf Kante genäht ist. Dann 
lieber noch 200 Euro mehr ausgeben und Reserven haben.

Aber das ist nur so ein Gefühl..

von Peter M. (peter_m94)


Lesenswert?

WK, interessante Alternative. 2 Eth-Ports und ein MII welches ich direkt 
an den STM32 legen kann. Und da 10/100 Eth nur zwei Paare braucht, wäre 
noch Platz für eine Enumerierungsleitung über die Patch-Kabel.

von H.Joachim S. (crazyhorse)


Angehängte Dateien:

Lesenswert?

Schlumpf schrieb:
> Na ja, so richtig toll ist das aber auch nicht.

Naja, man muss ja nicht bei den Urschleim-SN75irgendwas bleiben....

von Peter M. (peter_m94)


Lesenswert?

Leute, find ich echt super das Brainstorming hier.

Es muss kein Video abgespielt werden. Latenz ist nicht das Killer-Thema. 
ich teile aber Schlumpfs Gefühl "lieber noch 200 Euro mehr ausgeben und 
Reserven haben".

Wenn ich "denen" das Konzept vorstelle und die sagen, jo das machen wir, 
dann sind +/-200€ für ein Exponat Schnuppe. Wird eh schon teuer genug. 
Naja, ich sag nur "Fördergelder" :D

von Schlumpf (Gast)


Lesenswert?

H.Joachim S. schrieb:
> Naja, man muss ja nicht bei den Urschleim-SN75irgendwas bleiben....

Stimmt schon.. aber ich hab ja oben geschrieben, was ich machen würde.
Selbst die 40 MBit/s knicken vermutlich bei langen Leitungen ein.

Peter M. schrieb:
> 2 Eth-Ports und ein MII welches ich direkt
> an den STM32 legen kann.

korrekt

Peter M. schrieb:
> Und da 10/100 Eth nur zwei Paare braucht, wäre
> noch Platz für eine Enumerierungsleitung über die Patch-Kabel.

Wäre eventuell nicht mal nötig.
Bei Ethernet kann man wahrscheinlich sogar die physikalische Topologie 
über die Switches rekonstruieren. Weiß da jemand was drüber?

Was Kabel angeht:
Industriekabel sind idR recht teuer. Aber vielleicht mal bei den 
Bühnentechnikern schauen. Vielleicht gibt es da ja was. Die haben ja 
auch das Problem, dass Daten und Power kreuz und quer verteilt werden 
müssen.

Vielleicht gibt es da ja was Passendes, wo Ethernet und Power in einem 
Kabel übertragen werden kann

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Peter M. schrieb:
> Und da 10/100 Eth nur zwei Paare braucht, wäre
> noch Platz für eine Enumerierungsleitung über die Patch-Kabel.

Naja, also egal ob Ethernet, RS-irgendwas, CAN oder CAN-doch-nicht oder 
noch was anderes: Ich glaub', dass das ganze Ding rein softwaremaessig 
ziemlich viele ganz dicke Bretter zu bohren beinhaltet. Wahrscheinlich 
noch viel dicker und mehr, als du momentan glaubst.
Von daher wuerd' ich da keine extra Leitung ziehen, sondern Enumerierung 
eben rein per Software ueber Ethernet machen.
Der Vorteil bei Ethernet ist, dass es fast fuer jeden Furz schon ein 
fertig ausgepatschtes, dokumentiertes (RFC) und irgendwo schon 
eingesetztes Protokoll gibt. Der Nachteil: Du musst's halt finden.

Gruss
WK

: Bearbeitet durch User
von Rudolph R. (rudolph)


Lesenswert?

Matthias M. schrieb:
> CAN hat bis zu 300 MHz (http://www.bittiming.can-wiki.info)

Habe ich das überlesen, oder ist das wirklich niemandem aufgefallen?

Nein, CAN geht nicht bis 300MHz, auf der Seite von dem Link werden die 
Parameter für die CAN-Unit aus dem Takt der CAN-Unit abgeleitet.

Also was man einstellen muss wenn man die Unit mit 300MHz taktet und zum 
Beispiel 1MBit haben möchte.

Normales CAN geht bis 1MBit und kann dabei bis 8 Byte Pakete haben.

Das neuere CAN-FD geht wohl bis 10MBit, üblich sind aber 2MBit und die 
meisten Transceiver gehen auch offiziell bestenfalls bis 5MBit.
Und die Pakete können bis 64 Byte groß sein.
Dafür müsste der unbekannte Typ STM32 aber CAN-FD unterstützen und das 
können soweit nur die H7 (und irgendwelche L-Typen die im Zusammenhang 
mit einem Display eher nicht relevant sein sollten).

In 5 Jahren oder so nimmt man für sowas vielleicht Automotive Ethernet. 
:-)
10Base-T1s oder wir das heissen soll, ist kein Punkt-zu-Punkt mehr.

von Peter M. (peter_m94)


Lesenswert?

>softwaremaessig ziemlich viele ganz dicke Bretter

:D jaja, das stimmt schon. Dicke Bretter wie diese zu bohren ist 
allerdings mein Tagesgeschäft seit >15 Jahren. Projekte über alle 7 OSI 
Layer und noch eigene low-level Treiber - alles schon gemacht. Aber man 
muss ja nicht jedes Rad neu erfinden.

IP/Ethernet gefällt mir prinzipell recht gut, da einiges an Erfahrung 
vorhanden.

Die Plus-Punkte wären

+ wenig EMV-Ärger
+ Traffic Routing
+ Standardkomponenten
+ Reihenschaltung durch Mini-Switch pro Modul möglich

von Peter M. (peter_m94)


Lesenswert?

Rudolph: ja STM32H7 (die lowcost 750er) könnten es werden.

: Bearbeitet durch User
von H.Joachim S. (crazyhorse)


Lesenswert?

Guter Punkt - der Softwareaufwand wurde noch gar nicht betrachtet. Und 
der dürfte bei kaufmännischer Betrachtung ganz schnell die 
Hardwarekosten in der Bedeutungslosigkeit versinken lassen.
Die Frage ist also auch: was kannst du?  Und was kannst du in welcher 
Zeit leisten? Es soll schon Projekte gegeben haben, die am Kosten- 
und/oder Zeitrahmen gescheitert sind, obwohl der Ansatz an sich korrekt 
war.

von Schlumpf (Gast)


Lesenswert?

Peter M. schrieb:
> Leute, find ich echt super das Brainstorming hier.

ich auch :-)

Du kannst ja auch mal schauen, ob es ein Derivat des STM32 mit 
integriertem Switch gibt.

von Peter M. (peter_m94)


Lesenswert?

>Es soll schon Projekte gegeben haben, die am Kosten-
>und/oder Zeitrahmen gescheitert sind, obwohl der Ansatz an sich korrekt
>war.

Wohl wahr, wohl wahr. Die Gefahr sehe ich durchaus. Muss mir gut 
überlegen, welches Konzept ich denen vorlege.

>was kannst du?

Einiges. Habe lange (>10Jahre) Automotive Networks entwickelt. Viel LIN, 
CAN, MOST. (MOST wäre auch noch was, wenn es nicht so speziell und teuer 
für kleine Stückzahlen wäre. Zudem ist es halt eine Ring-Topolgie).

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Schlumpf schrieb:
> Du kannst ja auch mal schauen, ob es ein Derivat des STM32 mit
> integriertem Switch gibt.

Kann man natuerlich machen, aber wenns das tatsaechlich geben sollte, 
dann brauchst du jeweils noch 2 PHYs...

Gruss
WK

von Peter M. (peter_m94)


Lesenswert?

>ob es ein Derivat des STM32 mit
> integriertem Switch gibt.

hab ich noch keinen gesehen. Und ja, es bräuchte auch nochn zwei PHYs. 
Daher ist der KSZ8873 schon recht passend.

von Schlumpf (Gast)


Lesenswert?

Dergute W. schrieb:
> dann brauchst du jeweils noch 2 PHYs...

Das ist allerdings ein Argument :-)

von Schlumpf (Gast)


Lesenswert?


von Info (Gast)


Lesenswert?

mikeselectricstuff hat sowas mit iPod Displays realisiert (YouTube). 
Über den Bus berichtet er auch.

von SoC Rulez! (Gast)


Lesenswert?

> welchen Bus nehmen?

Ethernet 100BaseT!

24 - 48 Port Switches gibts für 1€/Port.

ID anhand der MAC.

Display ans (Banana, Orange, Rasp)-berry stecken und fertig ist die 
Hardware.

von Peter D. (peda)


Lesenswert?

H.Joachim S. schrieb:
> Was bringt denn hier CAN? Gar nichts. Datenrate deutlich geringer,
> heftiger overhead, nur kleine Datenpakete.

Der Overhead ist aber nur im Controller. Von der Software her ist CAN so 
ziemlich das einfachste, was es gibt. Und man darf beliebig viele 
Datenpakete hintereinander senden.
Die Nutzdatenrate ist allerdings nur 500kBit, CAN-FD geht etwas höher.

Eine hohe Datenrate ist aber auch nicht nötig. Mit einem SPI-Flash kann 
man bequem auf jedem Modul 64MB zwischenspeichern und dann über eine 
einfache Scriptsprache Bildsequenzen synchron ausgeben lassen.

von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

CAN hat auch den Vorteil, dass man Übertragungsfehler erkennt und 
einzelne Nodes ohne Polling auch Fehler zurück melden können. Ob die 
Geschwindigkeit reicht hängt wirklich sehr von der Anwendung ab. Dazu 
haben wir einfach nicht genug Details.

von macgyver (Gast)


Lesenswert?

SoC Rulez! schrieb:
>> welchen Bus nehmen?
>
> Ethernet 100BaseT!
>
> 24 - 48 Port Switches gibts für 1€/Port.
>
> ID anhand der MAC.
>
> Display ans (Banana, Orange, Rasp)-berry stecken und fertig ist die
> Hardware.

und stromversorgung über poe.

von Peter M. (peter_m94)


Lesenswert?

CAN ist sicher in der engeren Auswahl. Die 500kBit währen wohl zuwenig, 
daher CAN-FD.

Bei Ethernet müsste ich halt die ganzen oberen Layer mit reinziehen. Da 
wäre CAN in der Tat simpler, zumal das ja ein geschlossenes System ist, 
auf das keiner von Aussen drauf muss.

Die MCU ST32H7 hat zwei CAN-FD on-chip, würde ich also schon anbieten. 
Als Verkabelung RJ54 / Patchkabel.

von Peter M. (peter_m94)


Lesenswert?

> Ethernet 100BaseT!
>
> 24 - 48 Port Switches gibts für 1€/Port.

Fällt aus, wegen Stern-Topologie. Das soll eben gerade eine Art 
Endgespeiste Schlange bilden, ohne das jedes Modul eine eigene Leitung 
zu einem Switch bekommt.

Steuerteil(Master) liegt irgendwo in einer Schwarzen Kiste ab Boden und 
ab dort gehts los mit einem möglichst dünnen Kabel (z.B. Ein dickeres 
Adernpaar für die 48V DC und CAT6)

von tgdfgdf (Gast)


Lesenswert?

würde das auch über Eth mit POE machen

ggf einen STM32 mit LCD dran
die können auch recht fix JPEGs decodieren

und das ganze ist gut erweiterbar

oder für andere dinge verwendbar ^^

der SW aufwand hält sich in grenzen

von Peter M. (peter_m94)


Lesenswert?

>ggf einen STM32 mit LCD dran

Genau das wäre die Idee. Ein STM32H750 (billig-version mit nur 128k 
Flash).

Es gäbe zwar kleine IP-Stacks, aber CAN wäre halt genügsamer von der SW 
Seite her.

Matthias M. hat da schon weiter oben einen praktischen Vorschlag für die 
Belegung des RJ54 mit CAN und Enumerierungsleitung gemacht.

: Bearbeitet durch User
von H.Joachim S. (crazyhorse)


Lesenswert?

CAN-FD - ja, das würde gehen. Höhere Datenrate an sich im Datenbereich 
und vor allem grössere Pakete. Und wenn das dein angedachter Controller 
schon unterstützt - umso besser. Allzuviele gibts noch nicht mit FD.

von Schlumpf (Gast)


Lesenswert?

Peter M. schrieb:
> Bei Ethernet müsste ich halt die ganzen oberen Layer mit reinziehen.

Wieso? Was du innerhalb des Frames zwischen Source-MAC-Address und FCS 
machst, interessiert weder den PHY noch den Switch (MAC-Switch) noch den 
MAC-Controller.
Das kannst du komplett mit einem prorietären Protokoll deiner Wahl 
"befüllen".

Du nutzt einfach nur die unteren Layer. Die Vorteile der Physik zur 
Übertragung und die des MAC zum Switchen.

Peter M. schrieb:
> Da
> wäre CAN in der Tat simpler, zumal das ja ein geschlossenes System ist,
> auf das keiner von Aussen drauf muss.

Ist dein System ja auch.
Der Master und die Slaves sind ein geschlossenes System. Die Sprache, 
die die gemeinsam sprechen, kannst du selbst erfinden.

Und dann wird der Aufwand nicht mehr als bei CAN.
Eventuell sogar geringer, da du deine Nachrichten nicht so klein 
segmentieren musst, wie bei CAN. In nen MAC-Frame passen immerhin ca 
1500 Byte rein.

von Cghgf (Gast)


Lesenswert?

Ich würde einfach per Cube MX das LwIP RTOS Beispiel nehmen


Dann die socketAPI und fertig der salat

Jpegdec lieb zur Dekompression

Du wartest einfach auf eine eingehende Verbindung mit einem Bild

Auf der master Seite kannst du wunderbar einen PC nehmen die die Bilder 
pro Modul reinläd

Einfach eine TCP Verbindung aufbauen und Bild Reinschießen , fertig.


Das sind in Summe 20-40 Zeile Code die man selbst schreiben müsste

Der Rest ist quasi Out of the Box aus dem Cube MX

von Peter M. (peter_m94)


Lesenswert?

>Was du innerhalb des Frames zwischen Source-MAC-Address und FCS
>machst, interessiert weder den PHY noch den Switch (MAC-Switch) noch den
>MAC-Controller.

Ja, ist ein Argument. Und wenn die FCS am Schluss nicht stimmt, dann 
muss ich halt schauen, dass ich das letzte Frame nochmal bekomme. Wäre 
jetzt auch nicht wild so ein Handshake-System zu bauen.


Eth-Switch-Baustein (2 Port) zieht 90mA (~0,3W @3,3V)
De CAN MCP2562fd zieht auch max. 45mA, und davon zwei je Modul

Es kommt also aufs Selbe raus hinsichtlich Stromverbrauch.


EDIT: CubeMX machts einem echt leicht, das stimmt. Find ich eh genial 
was ST da alles an Tools und Proof-Of-Concept Sachen liefert.

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Peter M. schrieb:
> Und wenn die FCS am Schluss nicht stimmt, dann
> muss ich halt schauen, dass ich das letzte Frame nochmal bekomme. Wäre
> jetzt auch nicht wild so ein Handshake-System zu bauen.

Genau das ist der springende Punkt, den seh' ich anders. Wenn du eben 
statt IP irgendwas selberdengelst, was auf Ethernet aufsetzt, dann musst 
du dich um diesen ganzen Shice selber kuemmern: Selber spezifizieren, 
coden, testen, debuggen. Nimmst du die ueblichen "hoeheren" Protokolle 
(TCP, TFTP, ...), dann sieht das jetzt fuer dich so aus, als haettest du 
einen Mordsoverhead.
Aber ich glaub' eben, dass dieser Mordsoverhead noch viel mordsmaessiger 
wird, wenn du dir da irgendwelche Protokolle selberzusammenzimmerst, bis 
das nur halbwegs funktioniert.
Klar brauchst du wahrscheinlich mehr RAM/Flash/externe Libraries als mit 
der handgedengelten Loesung. Aber's wird wohl schneller oder ueberhaupt 
fertig.

Gruss
WK

von Peter M. (peter_m94)


Lesenswert?

>statt IP irgendwas selberdengeln, Selber spezifizieren, coden, testen, >debuggen.

Alles schonmal gemacht. Schreckt mich jetzt nicht umbedingt ab.
Aber klar, wenns was Fertiges gibt und es in die 128kB passt... ich muss 
es nicht haben.

Die Fehler/Retransmit-Sache könnte ich mir mit CAN sparen. Da ist 
Auto-retransmit schon in der Hardware drin.

von Cghgf (Gast)


Lesenswert?

Dergute W. schrieb:
> Genau das ist der springende Punkt, den seh' ich anders. Wenn du eben
> statt IP irgendwas selberdengelst, was auf Ethernet aufsetzt, dann musst
> du dich um diesen ganzen Shice selber kuemmern: Selber spezifizieren,
> coden, testen, debuggen. Nimmst du die ueblichen "hoeheren" Protokolle
> (TCP, TFTP, ...), dann sieht das jetzt fuer dich so aus, als haettest du
> einen Mordsoverhead.
> Aber ich glaub' eben, dass dieser Mordsoverhead noch viel mordsmaessiger
> wird, wenn du dir da irgendwelche Protokolle selberzusammenzimmerst, bis
> das nur halbwegs funktioniert.
> Klar brauchst du wahrscheinlich mehr RAM/Flash/externe Libraries als mit
> der handgedengelten Loesung. Aber's wird wohl schneller oder ueberhaupt
> fertig.

deswegen das bsp mit dem RTOS lwip
das schöne ist .. der macht den ganzen bufferkram alles für dich.

socket(),bind(), accept() , recv()
mehr brauchst du fast nicht .. und der kram landet da wo du es willst

vorteil bei echter IP lösung ist das man das ganze auch im nachhinein 
beliebig erweitern könnte ...

allein deswegen lohnt der aufwand das so zu machen

von Matthias M. (Firma: privat) (quadraturencoder)


Lesenswert?

> Eth-Switch-Baustein (2 Port) zieht 90mA (~0,3W @3,3V)
> De CAN MCP2562fd zieht auch max. 45mA, und davon zwei je Modul
>
> Es kommt also aufs Selbe raus hinsichtlich Stromverbrauch.


Öh, nö, Du brauchst ja nur einen CAN Transceiver je Modul.


Um die Sternform und auch das aktive durchleiten im Ethernet zu 
vermeiden könntest Du Taps bauen, so wie hier:
https://www.instructables.com/id/Ethernet-Tap/

Dann schickt der Host halt blind UDP Pakete in der Gegend rum, und die 
einzelnen Clients greifen sich die Pakete mit der passenden MAC. Am Ende 
der Linie ist dann wohl noch irgendein Abschluss nötig. Und wieviele 
passive Taps so eine Leitung verträgt, weiss ich nicht.

Vielleicht geht's ja tatsächlich mit zwei von diesen:
https://www.digikey.de/product-detail/de/wiznet/J1B1211CCD/1278-1052-ND/7604176
und einem kleinen Verstärker dazwischen, also ohne switch.

Ich denke, DU brauchst nen Testaufbau und eine sehr gute Abschätzung der 
nötigen Datenrate.

: Bearbeitet durch User
von Schlumpf (Gast)


Lesenswert?

Ich denke, dass es recht übersichtlich ist, da selbst was zu schreiben.
Aber klar, es ist allemal mehr Arbeit, als was Fertiges zu nehmen.
Vorallem ist es sicher auch von Vorteil, wenn man so ne Kiste mal auch 
einfach an den PC stecken kann, um z.B. ein Firmwareupdate zu machen 
oder paar Statusinformationen abzufragen, etc.

Noch ne Idee:
Könnte man sich die Tatsache, dass der Switch gemanaged ist zu nutze 
machen, um die Topologie zu scannen?
Die Module lauschen nach Power On alle nur auf ihrem masterseitigem 
Port.
Der Port zum Nachfolger ist blockiert (muss der Switch können).
Dann kommt ein Broadcast mit der Aufforderung, auf den geantwortet wird, 
WENN die Node noch nicht konfiguriert wurde.
Danach schaltet die Node den Porz zum Nachfolger frei.

Somit könnte man recht einfach rausfinden, in welcher Reihenfolge die 
MAC Adressen in der Kette hängen.

von Peter M. (peter_m94)


Lesenswert?

>Öh, nö, Du brauchst ja nur ein CAN Modul.

Wenn ich CAN länger machen will (eben wirklich die 50m mit 50 
Teilnehmern) dann würde ich es wohl mit Peer-2-Peer CAN-FD machen und 
bräuchte dann eben zwei CAN-Treiber pro Modul.

>RTOS lwip, ja kenn ich, läuft auch sauber

Bitraten: Damit das brauchbar ist, sehe ich mind. 5 MBit/s.

>DU brauchst nen Testaufbau

Ja klar, das brauch ich eh. Muss mal das STM32H743I-EVAL, NUCLEO-H743ZI 
rauskramen und mir den Footprint von der IP-Lösung anschauen.

von Peter M. (peter_m94)


Lesenswert?

>Könnte man sich die Tatsache, dass der Switch gemanaged ist zu nutze
>machen, um die Topologie zu scannen?

An sowas dachte ich auch, da ich es vom MOST Bus her so kenne:

Dort sendet der Master (0x400) als erstes Licht in den nächsten Slave im 
Ring. Der wacht auf, Initialisiert sich und erhöht den Node Position 
Counter (0+1, physical addr. 0x401). Er leuchtet weiter zum nächsten 
Node, gibt den Counter weiter. Der macht das selbe (1+1, 0x402) usw. Am 
Ende des Rings kommt wieder der Master, der gleich weiss, wieviele Nodes 
da sind, wieviel Delay der Ring hat usw.

von Schlumpf (Gast)


Lesenswert?

So wäre es natürlich auch möglich... Allerdings muss der letzte dann 
erkennen, dass er der letzte ist. Aber das könnte er über den 
Link-Status des PHY für den Nachfolger raus finden.

von Peter M. (peter_m94)


Lesenswert?

>Link-Status des PHY für den Nachfolger raus finden.

Ja genau. Einfach einen Timeout laufen lassen nach der Link-Aktivierung 
und wenn da nach x Sekunden nichts kommt auf dem Secondary Port kommt 
bzw. der Link tot ist, dann ist das Ende der Schlange erreicht. Der 
Master wird dann mit einer simplen Nachricht informiert, da is nix mehr, 
ich bin der Letzte.

von Schlumpf (Gast)


Lesenswert?

Peter M. schrieb:
> Einfach einen Timeout laufen lassen nach der Link-Aktivierung
> und wenn da nach x Sekunden nichts kommt

Klingt simpel.
Allerdings bekommst du bei dieser Methode nicht so ohne weiteres mit, 
welche MAC Adressen die Geräte haben. Und die benötigst du aber.
Aber du könntest natürlich statt der Node-Positionen aufsteigende MAC 
Adressen vergeben.

Ob das schlau ist, gerade, wenn man die Geräte mal an nen PC steckt, sei 
mal dahin gestellt.

Vielleicht doch besser, die MAC einmalig vergeben und dann über die von 
mir genannte Methode abfragen und eben gar keine weitere Node ID 
vergeben, sondern einfach über die MAC Adressen arbeiten.

von Stefan V. (vollmars)


Lesenswert?

Für 50 Stück würde ich keine so komplexe Entwicklung ohne Betriebssystem 
machen. Klar das geht, aber warum willst Du dir das antun?

Mein Vorschlag nimm irgend so einen Mini-Linux-Computer, ak. Raspi, und 
Pack den über kaskadierte Switches an deinen Zentralrechner. Dann hast 
du an jeder Stelle maximal 5 Netzwerkkabel, da gibt es ja mittlerweile 
ziemlich dünne. Booten kannst Du übers Netzwerk.

Wenn ich dich richtig verstehe, willst Du eine geografische 
Adressierung, also der einzelne Knoten soll wissen wo er sich im 
Netzwerk befindet. Das finde ich auch eine gute Idee, weil DU Knoten 
ohne irgendwelche Konfiguration einfach tauschen kannst. Wenn ich das 
richtig sehe, sollte sich das mit der VLAN Funktion eines managed Switch 
realisieren lassen. Der ZyXEL GS1200-5HP könnte passen.

Falls du unbedingt nur ein LAN Kabel haben willst, dann kannst Du ja 
jeden Knoten mit einem USB-Ethernet-Dongle versehen. Und dein Netzwerk 
so durchschleifen.

Für die Stromversorgung lässt sich ja eine kleine Adapterplatine mit 
DC/DC Wandler für jeden Knoten stricken, evtl. kannst Du ja auch die POE 
Signalauskopplung auf der Platine vorsehen.

von Jitterer (Gast)


Lesenswert?

nimm doch einfach billige android tabelts vom chinaman da ist alles drin 
was du brahcst flash ram nen display und wlan.

Du baust ein Wlannetz mit einem Webserver auf. Auf diesen connecten sich 
die Tablets nach einanader und bekommen so eine ID zugewiesen.

Danach rufen alle tabelts eine Webseite auf die für ihre id generiert 
wird und darauf kannst du anzeigen was du möchtest.
Tuchbuttons gibts dann auch.
Wenn man Hardwarebuttens braucht spendierst du denen einen stm32F7 oder 
so mit ethernet der sich auch am webserver anmeldet

von Peter M. (peter_m94)


Lesenswert?

Ja klar, man kann auch was mit fertigteilen "basteln", aber ist hier 
etwas speziell. 4:3 Tablets gibts nicht. Zudem soll das auch einfach 
einen Schalter haben: AN und es geht in 5 Sekunden los. nicht noch jedes 
Tablet in 3m Höhe manuell einschalten usw.

von imonbln (Gast)


Lesenswert?

Peter M. schrieb:
> Das mit dem LED-Prinzip ist noch interessant, nur bedingt das halt, daß
> alle Empfänger den Sender immer sehen kann. Das kann ich leider nicht
> garantieren, weil ich nicht weiss, wie der die Teile anordnen will (in
> welcher Form).

Wieso? Vielleicht wäre es ja möglich zwischen die einzelnen Module eine 
Glasfaser zu verlegen. dann wäre die Räumlich Anordnung egal. Jedes 
Module bekommt ein Eingang ein Ausgang für das nächste und die 
Installation wird als Daisychain betrieben.

von Schlumpf (Gast)


Lesenswert?

imonbln schrieb:
> Vielleicht wäre es ja möglich zwischen die einzelnen Module eine
> Glasfaser zu verlegen. dann wäre die Räumlich Anordnung egal. Jedes
> Module bekommt ein Eingang ein Ausgang für das nächste und die
> Installation wird als Daisychain betrieben.

Da würde sich ja dann 100Base-FX förmlich aufdrängen... Wobei wir dann 
wieder beim Ethernet wären... Nur halt in teuer über POF :)

von Peter D. (peda)


Lesenswert?

Peter M. schrieb:
> Wenn ich CAN länger machen will (eben wirklich die 50m mit 50
> Teilnehmern) dann würde ich es wohl mit Peer-2-Peer CAN-FD machen und
> bräuchte dann eben zwei CAN-Treiber pro Modul.

Dann brauchst Du aber auch einen 2. CAN-Controller im MC. Und die SW muß 
jedes Paket von der einen Seite auf der anderen weiter senden.
Ein Repeater nur alle 10, 20 oder 25 Slaves sollte reichen.

von Bauform B. (bauformb)


Lesenswert?

Frank K. schrieb:
> PIC32 kann seine UARTs mit 20 MBit/s fahren, bei STM32 ist bei 4.5MHz
> Schluss. TIVA 4C geht bis 10 MHz.

Aus dem RM0410 (STM32F76xxx, STM32F77xxx):
1
USART main features
2
 • Configurable oversampling method by 16 or 8 to give flexibility
3
   between speed and clock tolerance
4
 • A common programmable transmit and receive baud rate of up to
5
   27 Mbit/s when USART clock source is the system clock frequency
6
   (Max is 216 MHz) and the oversampling by 8 is used

Die F76xxx haben acht UARTs, damit könnte man einen Hub bauen, der z.B. 
5 Ketten mit je 10 Modulen betreibt. Man kann also 5 Bilder gleichzeitig 
senden. Vor allem braucht man nur 1/5 des Stroms auf den Kabeln. Leider 
ist dann die Verbindung Master->Hub der Flaschenhals, aber auf der 
gleichen Platine geht das schon. Evt. kann es ja auch der Master 
übernehmen.

Ich würde immer Treiber-ICs spendieren, egal, ob RS422 oder CAN oder 
oder. Die sind ESD-mässig doch etwas robuster.

von Peter M. (peter_m94)


Lesenswert?

>2. CAN-Controller im MC

Ist beim ST32H7 vorhanden

>Ein Repeater

Das wäre halt unpraktisch, weil dann muss der Aufbauer immer 
mitüberlegen, wo mach ich nen Repeater. Und denen trau ich zu, dass die 
das 100% irgendwie verbocken.

>Ich würde immer Treiber-ICs spendieren

Da hast du recht, direkt Pins des uC auf nen Bus halten -> schlechte 
Idee.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Peter M. schrieb:
>>2. CAN-Controller im MC
>
> Ist beim ST32H7 vorhanden

Dann kann man das so machen. Die Bandbreite verringert sich ja nicht 
dadurch. Und der 2. Transceiver ist ja kein Kostenfaktor.
Wir leiten auch immer +24V mit über das Kabel und ein TSR 1-2450 macht 
dann 5V/1A daraus.

CAN hat den Charme, daß man es Bare-Metal verwenden kann. Es läuft auch 
schon ohne jeden Softwareoverhead stabil.
Bei UDP muß man sich dagegen um Datenverluste selber kümmern. Und TCP/IP 
hat richtig viel Overhead.

von Schlumpf (Gast)


Lesenswert?

Ethernet kann man auch ganz rudimentär betreiben.
Wenn man das tut, dann muss man sich in der Tat um Datenverluste 
kümmern. Aber das kann man auch auf einer recht tiefen Ebene ohne großen 
Protokolloverhead machen.
So wie man es eben auch machen würde, wenn man die Bilder per SPI oder 
I²C übertragen würde.
Wie ich bereits geschrieben habe, muss man ja nicht zwingend UDP oder 
TCP/IP verwenden.

Schlumpf schrieb:
> Was du innerhalb des Frames zwischen Source-MAC-Address und FCS
> machst, interessiert weder den PHY noch den Switch (MAC-Switch) noch den
> MAC-Controller.

Bei CAN sind nur ca 60% der Bandbreite für Nutzdaten verfügbar.
Bei Ethernet sind es 99%

Bei Ethernet stehen mir also effektiv 99MBit/s zur Verfügung (unter 
optimaler Ausnutzung des Frames)
Durch die Switche kann ich ohne Belastung der Nodes jede Node erreichen.

Bei CAN muss ich endtweder ein großes Netz aufbauen (dann geht die 
Bandbreite runter) oder jede Node hat zwei CAN-Ports und dann muss jede 
Node jeden Frame kopieren...

Also ich würde definitiv zu Ethernet tendieren.
Und wenn einem der ganze Overhead mit TCP/IP zu viel ist, dann erfindet 
man eben sein eigenes Protokoll. Angesichts der nötigen Funktionalität 
halte ich das für eine leichte Übung.

von NichtWichtig (Gast)


Lesenswert?

Erinnert mich ein bischen an ein System welches bei der Bahn eingesetzt 
wurde.
Jeder Wagen hat für Durchsagen ein lokalen Bus und ein Zugbusmodem mit 
eine 2 Drahtleitung an jede Kupplung.
Alle Wagons sind also über diese Zugbusmodem verbunden.
Aktiviert man eine Fahrerstand als master föngt das Zugbusmodem an 
beiden Kupplungen an serielle Daten zu senden und sucht dort nach 
Wagons.
Meldet sich einer wird er nummeriert und bekommt den befehl seine 
leitung von Kupplung A nach B zu schließen.
Der Master pollt nun durch den ersten Wagen duch zum zweiten Wagen.
Meldet sich dierer wird er nummeriert und schließt sein Kabelverbindung 
an die freie Kupplung.
Das geht solange weiter wie Wagons angekuppelt sind und beim letzten 
dann ein Timeout passiert.
Der letzte terminiert dann das Kabel und der Master macht an seiner 
anderen Kupplung das gleiche ... könnte ja sein er sitzt nicht am Ende.

Zum Schluß gibt es einen durchgängigen Bus und der Master kann jeden 
einzelnen Slave addressieren oder broadcast Daten senden.

von Schlumpf (Gast)


Lesenswert?

Ich hab das mal rechnerisch überschlagen, wie sich das mit CAN gestalten 
würde

Annahme:
Bild mit je 8Bit RGB macht bei der Auflösung ca 1MByte pro Bild.
Komprimierung lassen wir bei der Betrachtung mal außen vor.

Ein CAN-Frame besteht aus ca 14 Byte. Davon sind 8 Byte Datenfeld.
Es müssen also 1MByte irgendwie in diese 8Byte-Häppchen gequetscht 
werden.
Und dass da nix durcheinander kommt mit den Häppchen, sollten sie eine 
ID bekommen, welches der vielen Häppchen gerade übertragen wird.
Wenn man das ausrechnet, dann stellt man fest, dass einem nur noch 5 
Byte für die Daten übrig bleiben. 3 Byte werden benötigt, um diese 
200.000 Häppchen zu numerieren.

Effektiv hat mal also noch 5Byte Nutzdaten in einem 14Byte großen 
CAN-Frame
Das sind ca 30%

Also bleibt mir von der Datenrate des CAN nur 1/3 der Datenrate effektiv 
übrig.
bei 1MBit/s wären das noch ca 0,3MBit/s. Nun teilen wir noch durch 8 
weil wir ja in Bytes gerechnet haben und erhalten dann 0,04MByte/s.

Jetzt stopfen wir das Bild in diese Highspeed-Verbindung:
1MByte / 0.04MByte/s = 25s

Ein Bild benötigt also 25s bis es ankommt.

Bis also nach Power On alle Bilder geladen sind, vergehen über 20min.
Dein Kunde wird dir vor Glück um den Hals fallen und du wirst bei der 
Inbetriebnahme wahnsinnig :-)
Und hier ist ja nur die reine Übertragungsdauer betrachtet!!


Bei CAN-FD sieht es schon besser aus.. Hier sind bis zu 64 Byte möglich.
Davon sind dann nach Abzug des Counters für die Segmente noch 62 Byte 
übrig.
Unter der Annahme, dass der Overhead ähnlich ist, wie bei CAN, haben wir 
eine Ausnutzung der Bandbreite von ca 85%
Bei 10MBit/s bleiben also ca 8,5MBit/s was ca 1MByte/s entspricht.
Damit wäre das Bild dann in 1s durch.
Alle Bilder zu laden dauert aber immer noch ne knappe Minute.


Wie sieht es bei 100Base-TX aus?
1500Byte Datenfeld im Frame vs 18Byte overhead = nahezu 100% Bandbreite, 
die zur Verfügung steht.
100MBit/s = 12MByt/s => 80ms/Bild
=> 4s für alle 50 Bilder.

Nehmen wir an, dass du während der Entwicklungsphase und Testphase das 
System 500mal Starten wirst.
Dann bist bei CAN 250 Stunden mit Warten beschäftigt
Bei CAN-FD immerhin auch noch 8h
bei Ethernet ist es ne halbe Stunde.

In der gesparten Zeit kannst du dir ganz locker Gedanken über ein 
"Bare-MAC"-Protokoll inklusive Datensicherung und allem Pipapo machen 
:-)

Wenn ich das bauen müsste, wäre für mich der Fall klar, für welchen Weg 
ich mich entscheiden würde...

[Ich habe bei den Berechnungen natürlich oft ingenieursmäßig 
überschlagen. Aber falls ich irgendwo nen groben Fehler drin habe, 
korrigiert mich bitte]

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Bauform B. schrieb:
> Die F76xxx haben acht UARTs, damit könnte man einen Hub bauen, der z.B.
> 5 Ketten mit je 10 Modulen betreibt.

Yay! Endlich Switch-Software selber entwickeln koennen/duerfen/muessen. 
Wie waer's mit Leistungs I2C, statt UARTs?
Ich stell mir da jeweils 2x 'nen 2N3055 vor, der auf 12Ohm 50Watt 
Pullup-Widerstaenden gegen 24V arbeitet ;-)

SCNR,
WK

von Bauform B. (bauformb)


Lesenswert?

Dergute W. schrieb:
> Wie waer's mit Leistungs I2C, statt UARTs?
> Ich stell mir da jeweils 2x 'nen 2N3055 vor, der auf 12Ohm 50Watt
> Pullup-Widerstaenden gegen 24V arbeitet ;-)

Fast genauso machen wir das. Statt 2N3055 gibt es zwecks Strombegrenzug 
einen TDE1737, neuerdings BTS3800SL. Ganz so verschwenderisch sind wir 
auch nicht, 820 bis 3300 Ohm an 24V müssen reichen.

von Hyper Mario (Gast)


Lesenswert?

Jitterer schrieb:
> nimm doch einfach billige android tabelts vom chinaman da ist alles drin
> was du brahcst flash ram nen display und wlan.
>
> Du baust ein Wlannetz mit einem Webserver auf.

Also mMn. ist das mit Abstand die beste Idee von allen. Was spricht 
dagegen?

von Schlumpf (Gast)


Lesenswert?

Hyper Mario schrieb:
> Was spricht
> dagegen?


Hat der TO bereits beantwortet:

Peter M. schrieb:
> Ja klar, man kann auch was mit fertigteilen "basteln", aber ist hier
> etwas speziell. 4:3 Tablets gibts nicht. Zudem soll das auch einfach
> einen Schalter haben: AN und es geht in 5 Sekunden los. nicht noch jedes
> Tablet in 3m Höhe manuell einschalten usw.

von Cghgf (Gast)


Lesenswert?

^^  nette rechnung

aber bei JPEG sinds vlt noch 100-150kb je bild
ein STM32 mit HW Jpeg decoder kann das bei VGA auch noch in 25FPS ^^

mach einfach das ding zum JPEG/MJPEG display und gut ist

am PC kannst dann einfach bilder per festes http protokoll reinschießen 
und gut ist
- ich würde das über einen TCP socket machen
- bedeutet weniger arbeit zwecks buffering und so

elm chan tjpegdec passt ohne probleme in den ITCM RAM des M7
daher geht auch ein billigerer STM32F74x

die lib zerpflückt den stream in blöcke ..
wenn du dir ein gutes buffermanagement einfallen lässt , brauchst du 
kein ganzes bild zwischenpuffern



musst dir quasi nur gedanken machen wie das mit der Position gelöst wird
aber über speed brauchst dir keine gedanken kmachen
ggf über die IP adresse positionieren

192.168. x . y  koordinaten
alle mit subnetmaske 255.255.0.0  und dann gehts los

von Schlumpf (Gast)


Lesenswert?

Cghgf schrieb:
> aber bei JPEG sinds vlt noch 100-150kb je bild

Klar, deswegen schrieb ich ja auch, dass ich bewusst mal ohne 
Komprimierung betrachte.
Die Intention war einfach aufzuzeigen, dass die Idee, das über CAN zu 
übertragen im Vergleich zu Ethernet schon deutliche Schwachstellen hat.

Ob man dann ein eigenes Protokoll entwickelt, oder auf bestehende 
Protokolle zurückgreift, ist eigentlich nebensächlich.

Ethernet ist einfach dafür gebaut, große, zusammenhängende Datenmengen 
zu managen und zu übertragen.
CAN ist dafür gebaut, ein paar Bits durch die Gegend zu schubsen.

Entsprechend gibt es für Ethernet auch fertige Protokolle, die sowas 
unterstützen.
Bei CAN gibt es sowas bestimmt auch.. Aber dann ist es auch wieder gerad 
egal, welche Dienste, Sockets, Protokolle,... ich implementieren muss.
Dann denke ich, wird es mit CAN auch nicht weniger aufwändig, als mit 
Ethernet.
Der Vorteil, dass CAN ein paar Sachen in Hardware macht, ist einfach 
gemessen an den Nachteilen, die CAN mitbringt ein eher schwaches 
Argument, hier CAN einzusetzen.

von Rudolph R. (rudolph)


Lesenswert?

Schlumpf schrieb:
> Ein CAN-Frame besteht aus ca 14 Byte. Davon sind 8 Byte Datenfeld.

Nein, CAN-FD hat bis 64 Byte Nutzdaten.

von Peter M. (peter_m94)


Lesenswert?

Danke euch für die Analysen.

Die Datenmenge und keine harte Anforderung ans Timing, da liegt Ethernet 
klar vorne.

Ds bisschen Auto-Retransmit ist schnell eingebaut. Hab das Prinzip hier 
schon fertig liegen in C. Wurde für einen Firmware-Loader über K-Line 
verwendet.

von Rudolph R. (rudolph)


Lesenswert?

Verflixt, zu langsam für Edit...

von Schlumpf (Gast)


Lesenswert?

Rudolph R. schrieb:
> Nein, CAN-FD hat bis 64 Byte Nutzdaten.

Rudolph R. schrieb:
> Verflixt, zu langsam für Edit...

Dann brauche ich ja jetzt nix dazu sagen, oder?

von Hyper Mario (Gast)


Lesenswert?

Schlumpf schrieb:
> Hat der TO bereits beantwortet:

Sorry, nicht gesehen

>
> Peter M. schrieb:
>> Ja klar, man kann auch was mit fertigteilen "basteln", aber ist hier
>> etwas speziell. 4:3 Tablets gibts nicht.

4:3 Folie mittels Schneidplotter als Bastellösung.


> Zudem soll das auch einfach
>> einen Schalter haben:

USB Stromversorgung keine Option?

> AN und es geht in 5 Sekunden los. nicht noch jedes
>> Tablet in 3m Höhe manuell einschalten usw.

Evtl. Standby und Ein/Aus Kommando über USB (per HUB/Repeater wg. der 
Länge).


Rudolph R. schrieb:
> Schlumpf schrieb:
>> Ein CAN-Frame besteht aus ca 14 Byte. Davon sind 8 Byte Datenfeld.
>
> Nein, CAN-FD hat bis 64 Byte Nutzdaten.

Genau das richtige für ein Multimediaprojekt ;-).

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.