Forum: Mikrocontroller und Digitale Elektronik 32 GPIO Sender und Empfänger via Bus/Ethernet


von Joshua R. (joru1407)


Lesenswert?

Hallo zusammen,

Wir suchen aktuell eine Möglichkeit, 32 digitale Steuersignale zu 
übertragen. Hierbei soll letztendlich ein herkömmliches Steuerkabel 
durch einen Bus oder eine IP Verbindung via 2-Wire oder Ethernet ersetzt 
werden.

Also im grunde genommen zwei Boards die untereinander verbunden werden. 
Das eine mit 32 Digital Inputs und das andere mit 32 Digital Outputs. 
Wird nun an Board A Input 1 geschaltet, soll an Board B Output 1 
geschaltet werden.

Letztendlich natürlich umsetzbar mit Arduino Boards, aber gibt es 
hierfür nicht bereits fertige Lösungen auf dem Markt? Bei meiner Suche 
bin ich bisher nicht wirklich fündig geworden, weiss aber auch nicht 
wonach ich suchen soll.

Letztendlich würde ich es als eine Art 32 GPIO over Ethernet/Bus 
Extender bezeichnen.

Kennt jemand etwas in dieser Richtung?

Danke und viele Grüße
Joshua

von uff basse (Gast)


Lesenswert?

Joshua R. schrieb:
> Hierbei soll letztendlich ein herkömmliches Steuerkabel
> durch einen Bus oder eine IP Verbindung via 2-Wire oder Ethernet ersetzt
> werden.

Längen- und Geschwindigkeitsanforderungen angeben.

von Joshua R. (joru1407)


Lesenswert?

Nichts besonderes, Länge des Kabels wird bei maximal 30m liegen, alles 
unter 100ms ist in diesem Fall ausreichend.

von temp (Gast)


Lesenswert?

Jetzt kommt es drauf an wie die Ein/Ausgänge aussehen sollen. Wenn es 
Relais sein sollen könnte was aus dem bereich DMX passen.

https://www.zerodna.de/DMX-8-Kanal-Relais-Dimmer-Output-Modul-USB-kompatibel-mit-USITT-DMX512-A-Standard-Basisadresse-von-1-505
https://www.amazon.de/Channel-Decoder-Controller-Digital-Display/dp/B0111QLHZS/ref=sr_1_50?dchild=1&keywords=dmx+switch&qid=1615662022&sr=8-50

Ausgabemodule kriegst du in allen denkbaren Varianten. Das Eingangsmodul 
musst du sicher selber bauen(lassen). Das ist aber fast kein Aufwand. Je 
nachdem wie die Eingänge aussehen sollen.

Durch die zyklische Übertragung der Daten ist eine relativ hohe 
störfestigkeit gegeben.

von Frank K. (fchk)


Lesenswert?

Joshua R. schrieb:

> Wir suchen aktuell eine Möglichkeit, 32 digitale Steuersignale zu
> übertragen. Hierbei soll letztendlich ein herkömmliches Steuerkabel
> durch einen Bus oder eine IP Verbindung via 2-Wire oder Ethernet ersetzt
> werden.

Das Problem haben schon Leute vor Euch gehabt. Dafür gibt es Serializer 
und Deserializer. Damit kann man z.B. einen parallelen 24 Bit LCD Video 
Anschluss über 100m Zweidraht-Leitung übertragen. Glaubst Du nicht?

https://www.ti.com/lit/an/snla103a/snla103a.pdf

fchk

von uff basse (Gast)


Lesenswert?

temp schrieb:
> Durch die zyklische Übertragung der Daten ist eine relativ hohe
> störfestigkeit gegeben.

Übersetzt heisst das: die miserable Störfestigkeit wird durch
zyklisch häufig wiederholtes Protokoll übertüncht.

von Joshua R. (joru1407)


Lesenswert?

Ich hatte gehofft dass schon Leute vor uns das gleiche Problem hatten 
und es demnach einfache und günstige Lösungen ohne selber Basteln gibt. 
:-)

Gibt es in Richtung Serializer / Deserializer irgendwelche 
Bezugsquellen? Relativ viel finde ich zu der Thematik nicht.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Joshua R. schrieb:
> einfache und günstige Lösungen ohne selber Basteln gibt.

Gibt es aber nicht mit so vielen Kanälen.
https://www.luedeke-elektronic.de/2-Draht-Fernbedienung-10-Kanal-12V-DC-K8023.html

von Falk B. (falk)


Lesenswert?

Joshua R. schrieb:
> Gibt es in Richtung Serializer / Deserializer irgendwelche
> Bezugsquellen? Relativ viel finde ich zu der Thematik nicht.

Nennt sich UART. Ich hab sowas mal für 8 Bit entworfen.

Beitrag "Re: Mehrere Signale über eine Leitung"

(Ohje, Ewigkeiten her)

Ist natürlich kein Fertigprodukt und müßte hier noch auf 32 Bit in der 
Software erweitert werden.

Beitrag #6619767 wurde von einem Moderator gelöscht.
von Thomas K. (joshua314)


Lesenswert?

Guten Tag Joshua R.

Am einfachsten ist es, wie schon von dir selbst vorgeschlagen TCPIP 
nimmst.

aber entgültig als IO würde ich es so machen.
Ausgabe:
https://www.makerblog.at/2015/01/das-schieberegister-74hc595-am-arduino/
Eingabe:
https://elektro.turanis.de/html/prj173/index.html

Gruß Thomas

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Thomas K. schrieb:
> Am einfachsten ist es, wie schon von dir selbst vorgeschlagen TCPIP
> nimmst ... Schieberegister

Ich habe da zufällig ein passendes Projekt auf 
http://stefanfrings.de/net_io/index.html (siehe Foto). Das Board kann 
Ethernet, USB und optional auch Bluetooth. Das Ethernet Modul kann man 
fertig kaufen. Die Lochraster Platine hat 2x24 Anschlüsse, das Programm 
ist aber schon für 2x32 ausgelegt. Das Programm des "Senders" müsstest 
du selbst entsprechend anpassen, denn fertig ist nur den Empfänger.

Ich würde für deine Anwendung allerdings RS-485 bevorzugen, da 
einfacher. Mit der Arduino IDE dürfte die Programmierung an einem Tag 
erledigt sein. Als Board kann ich 
https://www.chip45.com/atmega644-usb-rs485-modul.html?language=de 
empfehlen, da ist der RS-485 Transceiver sogar mit drauf. Dieses auf 
eine Lochrasterplatine packen, die gewünschten I/O Anschlüsse und 
Überspannungsschutz (für die lange Leitung) drumherum bauen - fertig.

von Marco H. (damarco)


Lesenswert?

Rs422 Protokoll vielleicht DMX512,  Can Bus ginge auch noch...

: Bearbeitet durch User
von David S. (gutmut)


Lesenswert?


von Soziopathologe (Gast)


Lesenswert?

> Wir suchen

Es ist schon armselig wegen lächerlicher 32 zu übertragender Bits
die Umwelt zu belästigen. Dem Plural folgend, gibt es dort nur Deppen.

> natürlich ... mit Arduino

Für geistige Tiefflieger genau richtig!

von Stefan F. (Gast)


Lesenswert?

Soziopathologe schrieb:
> Für geistige Tiefflieger genau richtig!

Troll dich, geh mal weiter Bitcoins mit deiner Spitzhacke schürfen.

von Stefan F. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich würde für deine Anwendung allerdings RS-485 bevorzugen, da
> einfacher....

Ich habe nicht daran gedacht, dass von den 32 Pins mindestens 2 durch 
die serielle Kommunikation belegt werden. Bei diesem Board hättest du 
hne externe Erweiterung "nur" bis zu 30 Kanäle.

von Johannes S. (Gast)


Lesenswert?

wenn es Ethernet werden soll, dann sind ST Nucleo-144 Boards fertige 
Hardware, NUCLEO STM32F746, F767, F207 gibt es für ca. 20€ netto bei 
DigiKey oder anderen. Die haben Ethernet und reichlich IO drauf, dazu 
noch alle anderen Schnittstellen und auch gute A/D Wandler.
Als SW das mbed-os drauf, das Programm für einen Sender sähe wie unten 
aus (Fehlerbehandlung weggelassen, aber man kann debuggen und die err 
Variable im Fehlerfall ansehen).
Mbed Studio installieren, Projekt für das Board erstellen, kompilieren 
und download starten, fertig.
Für den Empfänger entsprechend den receive zuerst und PortOut für die 
Ausgaben verwenden.
Für Portextender wie MCP23017, die es auch mit Relais auf einem Board 
gibt, sind auch fertige Komponenten zu finden und es ist kein großer 
Aufwand die anstelle oder zusätzlich zu den eingebauten Ports zu 
verwenden.

Ein Projekt das Sonntags noch vor dem Frühstück fertig ist.
1
#include "mbed.h"
2
#include "EthernetInterface.h"
3
4
typedef struct {
5
    int port0_15;
6
    int port16_31;
7
    float analog0;
8
} udp_data_t;
9
10
AnalogIn  aIn(A0);
11
PortIn    portE(PortE, 0xffff);
12
PortIn    portF(PortF, 0xffff);
13
14
int main() {
15
    SocketAddress localAddress("192.168.100.1");
16
    SocketAddress subnetmask("255.255.255.0");
17
    SocketAddress gateway("0.0.0.0");
18
19
    SocketAddress remoteAddr("192.168.100.2", NSAPI_IPv4, 8000);
20
21
    // Bring up the ethernet interface
22
    volatile nsapi_error_t err;
23
24
    net.set_network(localAddress, subnetmask, gateway);
25
    err = net.connect();
26
27
    // create UDP socket
28
    UDPSocket sock;
29
    sock.open(&net);
30
    
31
    udp_data_t buffer;
32
    while(1) {
33
        buffer.port0_15 = portE;
34
        buffer.port16_31 = portF;
35
        buffer.aIn;
36
37
        // send data
38
        err = sock.sendto(remoteAddr, &buffer, sizeof(buffer));
39
40
        // receive data (receiver should echo data
41
        err = recvfrom(nullptr, &buffer, sizeof(buffer));
42
43
        // wait before sending again
44
        ThisThread::sleep_for(1ms);
45
    }
46
47
    return 0;
48
}

von Stefan F. (Gast)


Lesenswert?

Johannes S. schrieb:
> Ein Projekt das Sonntags noch vor dem Frühstück fertig ist.

So ist es auf jeden Fall um Welten einfacher, als mit meinem alten AVR 
Projekt, das ich oben nannte.

von Johannes S. (Gast)


Lesenswert?

ja, man muss aber fairerweise dazu sagen das die Entwicklung so eines OS 
(oder der Arduino Libs) auch viele Mannjahre dauert.
Ich habe auch mit Net-IO von Pollin angefangen, das würde auch für so 
eine Aufgabe reichen, aber da muss man viel basteln und zusammensuchen.
Dann habe ich mich früh auf die Cortex-M gestürzt (die Vorgänger waren 
eher gruselig) mit dem LPCXpresso LPC1769. In den Beispielen war auch 
schon Code fürs Networking drin, an das Board muss nur ein Magjack 
angeschlossen werden. Nur Projekte from Scratch zu starten und dann den 
Netzwerk Code hinzuzufügen war mir zu kompliziert. Den gezeigten Mbed 
Code kann ich mir gerade noch merken, da brauche ich keinen 
Codegenerator für und kann die paar Zeilen auch einfach in ein anderes 
Projekt reinkopieren.

Edit:
in dem Code oben fehlt noch:
1
// Network interface
2
EthernetInterface net;
3
4
// und das sollte so sein:
5
        buffer.analog0 = aIn;

und der socket sollte ein timeout bekommen um zu detektieren das der 
Empfänger nichts zurücksendet. Bei solchen Feinheiten helfe ich gerne 
wenn das so nachgebaut werden sollte.

von Kevin M. (arduinolover)


Lesenswert?

Johannes S. schrieb:
> dann sind ST Nucleo-144 Boards fertige Hardware, NUCLEO STM32F746, F767,
> F207

Zu bedenken ist das die Nucleo Boards nicht kommerziell eingesetzt 
werden dürfen, oder hat sich das geändert?
Das könnte hier ein Problem sein.

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.