32 GPIO Sender und Empfänger via Bus/Ethernet

OP #6619449
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
Gast #6619495
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.
#6619506
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
Beitrag #6619767 wurde von einem Moderator gelöscht.
Gast #6619812
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.
Angehängte Dateien:
Gast #6619828
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!
Gast #6619979
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
}
Gast #6620080
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren