Günstige (und bessere) alternative zur DMX Extension
Einklappen
X
-
Ich hab den Code um die Funktion für MAC-aus-EEPROM erweitert und und für Ethernet DHCP eingebaut (schaltbar). Außerdem habe ich ein wenig aufgeräumt und die Konfiguration in einen Block oben in der Datei verschoben. SPI wird jetzt auch nur noch bei Ethernet inkludiert, auch wenn das der Compiler natürlich wegoptimiert hat.
Die paar Strings zur Debug-Ausgabe habe ich mit dem F()-Makro in den Flash verschoben um ein paar Byte Speicher zu sparen.
Der Code kompiliert bei mir als Arduino Uno/Nano mit der offiziellen Ethernet Bilbiothek (W5100) sowie auch mit Paul Storffregens Ethernet Lib: https://github.com/PaulStoffregen/Ethernet und Robert L.'s Version von DMXSimple.
Als ESP8266 kompiliert er (nur DHCP, keine MAC) mit https://github.com/Rickgg/ESP-Dmx.
Kann das vielleicht mal jemand auf der ESP/Arduino Hardware testen?
Robert L.: Bin natürlich auf dein Feedback gespannt.Zuletzt geändert von pmayer; 12.11.2017, 13:57. -
HEUREKA!!! Funktioniert... wenn man den I2C richtig verkabelt geht es meistens besser :-D
Robert L. Ich habe UDP_TX_PACKET_MAX_SIZE (300) auskommentiert, da EthernetUDP es selbst auf 24 definiert. Paull Stoffregens Ethernet Bibliothek macht intern viele Sachen mit dem Buffer besser als die offizielle Lib UND der W5500 hat größere Buffer als der W5100.
Und habe "static myip" in "const myip" geändert... ;-)Zuletzt geändert von pmayer; 12.11.2017, 13:33.Einen Kommentar schreiben:
-
Mist, wenn ich das EEPROM für die MAC Adresse lese, raucht der komplette ATMega ab. Auf dem DMX kommt nur noch wirres Zeug und der angeschlossene Stripe blinkt abwechselnd in allen Farben...
Robert L. Habe static bei der MAC weg genommen... aber sowie ich aus den Registern des EEPROMS lese ist es vorbei... ich habe in Vermutung, dass sich DMXSimple mit I2C nicht verträgt. Hast du vielleicht eine Idee dazu?Zuletzt geändert von pmayer; 11.11.2017, 15:56.Einen Kommentar schreiben:
-
Vielen vielen Dank für die Infos. Ich habe die Dioden und die 4,7Ω Widerstände eingabaut sowie den 100Ω ausgebaut. Außerdem habe ich die Werte der Pull-Up/Pull-Down-Widerstände auf 1k5Ω gesenkt.
Hier übrigens mal mein Testaufbau:
Und hier noch ein Video von der Breadboardversion in Betrieb: https://cloud.codm.de/nextcloud/s/hqkr49xL1liZRcE
Ich bin völlig begeistert wie verzögerungfrei das läuft. Geht übrigens auch mit node-red ohne Probleme.
Gast : Im Anhang übrigens der aktuelle Schaltplan.Angehängte Dateien1 BildZuletzt geändert von pmayer; 13.11.2017, 22:38.Einen Kommentar schreiben:
-
Ein Gast antworteteAusgangsbeschaltung:
Auf die Schutzbeschaltung würde ich nicht verzichten, auch wenn je nach Treiber dieser schon einiges mitbringt. Diskret mit 3 Widerständen (2x4.7 und 1x100Ohm) sowie zwei 6V Suppressor-Dioden. Der Bus wird ja mit +/- 5V betrieben. Oder eben ein SM712, wobei diese für -7V und +12V ausgelegt sind, was alle RS485 Treiber ab haben können.
Die Terminierung mit 120Ohm und einem Jumper passt. Somit kann man schon 1-2 lange Kabel anschliessen. (2, wenn der der Master in der Mitte sitzt, ohne Terminierungswiderstand).
Bei den Pull-up und Pull-down Widerständen geht es um das "Fail Save Biasing".
Der Idle-Fall (alle Node auf Empfang, kein Bus-Treiber ist aktiv) ist für die Empfänger kein gültiger Buszustand. Mit den zwei Widerständen verhindert man also ein Floating. Den Idle-Zustand wiederum gibt es nur, wenn verschiedene Slaves an einem RS485-Bus senden können (Multipoint Kommunikation). Bei DMX gibt es die Zweiwegkommunikation zwischen dem DMX-Master und DMX-Slave, wenn das Protokoll RDM (Remote Device Management) von den zwei beteiligten Geräten unterstützt wird. Du must also entscheiden ob du RDM unterstützen möchtest. Ich selber finde es übertrieben und zudem sind nicht alle DMX-RDM Geräte untereinander kompatibel. Auch sind DMX RDM Geräte viel teurer und von den Loxonianern kaum im Einsatz. Würde mich auch nicht überraschen, wenn sich Loxone bei ihren Geräten (haben ja RDM) sich nicht an den Standard gehalten hätte. In der oben verlinkten Application Note findest du auch die Berechnung für die Pull-up und Pull-down Widerständen. Bei 5V wären es 1440 Ohm und nicht 10k.
Eingangsbeschaltung:
DE und nRE sind die Enable-Eingänge für den Driver und den Receiver, welche auf eine definiertes Potential müssen. Soll nur gesendet werden (kein RDM Unterstützung) , kommen beide fest auf +5V. Damit wird der Empfänger-Ausgang RO, welcher nie gebraucht wird, in den hochohmigen Zustand versetzt. Du brauchst also keinen 100Ohm Widerstand. RO einfach leer lassen.
Einen Kommentar schreiben:
-
https://sourceforge.net/p/udptodmx/c...unk/libraries/ - gefunden, danke -
Robert L. Sag mal, welche DMX-Lib muss denn nehmen? Weder DMXSimple aus der Library noch die hier https://github.com/PaulStoffregen/DmxSimple haben die Methode "getValue"...Einen Kommentar schreiben:
-
Hallo Zusammen,
ich würde gerne auch eine Satz bei euch bestellen, geht das noch? Oder ist die Platine noch in der Entwicklung?
grussEinen Kommentar schreiben:
-
Sag mal Robert L. , hättest du etwas dagegen die Entwicklung deiner Software auf github zu verlagern? Weil müsste den code ja sowieso forken um die Sache mit der MAC aus dem EEPROM einzubauen.
Paul Stoffregens Ethernet Lib nutze ich ja durch meine lokalen libraries, damit der W5500 ohne gehacke in den .h-files funktioniert: https://github.com/PaulStoffregen/Ethernet
Zuletzt geändert von pmayer; 10.11.2017, 15:49.Einen Kommentar schreiben:
-
So, hab mich für die FOCA Belegung entschieden. Es kann ja jeder mit Jumper-Kabeln einen beliebigen USB-Seriell-Adapter anschließen.
Hab auch die Zeit gefunden ein bisschen weiter zu machen. Die Maße der Platine passen jetzt genau in das 2TE Gegäuse.
Gast : Ich hab jetzt die Schutzbeschaltung für den RS485 noch nicht übernommen. Die Dioden und die 4,7Ω Widerstände machen aber sicher Sinn - sind sie zwingend nötig oder reichen die Pull-Up/Pull-Downs?
Danke übrigens auch noch mal für das Fachwissen von dir.
Hier mal der aktuelle Stand in Bildern.2 BilderZuletzt geändert von pmayer; 10.11.2017, 00:25.Einen Kommentar schreiben:
Einen Kommentar schreiben: