Forum: Mikrocontroller und Digitale Elektronik DMX Protokoll mit 8-Bit Atmel Prozessoren (ATmega1284P o.ä.)


von Fire H. (fireheart)


Lesenswert?

Hallo Forum

Ich möchte gerne im Bereich Lichttechnik (DMX Protokoll) einen "DMX 
Injektor" bauen, d.h. von einem Lichtmischpult über USART0 einen DMX 
Stream empfangen, bestimmte Bytes durch andere ersetzen und über USART1 
raus zu den "Feldgeräten" schicken.
Nun, ich habe mich schon ein wenig über DMX eingelesen und festgestellt, 
dass hier offenbar doch ein paar Tricks angewandt werden müssen. Wie 
mache ich z.B. das 8µs MARK Signal zum Starten (Timer? NOP Schleife?) 
und wie empfange ich dieses Signal am besten?

Gibt's hierzu gute Links, wo sowas schon mal - gut dokumentiert - mit 
ATmega's in Assembler gemacht wurde?

Grüße
FireHeart

von Chris K (Gast)


Lesenswert?

Gibt genug dazu zu finden. Hab selber hier schon Beispiele für nen xmega 
gepostet. Klassiker ist auch hölscherhi oder uli radig für Beispiele zu 
regulären megas. Sprich, wer sucht der findet

von c-hater (Gast)


Lesenswert?

Fire H. schrieb:

> Nun, ich habe mich schon ein wenig über DMX eingelesen und festgestellt,
> dass hier offenbar doch ein paar Tricks angewandt werden müssen. Wie
> mache ich z.B. das 8µs MARK Signal zum Starten (Timer? NOP Schleife?)
> und wie empfange ich dieses Signal am besten?

Das geht alles mit der UART alleine. Man muss bloß verstehen, wie sie 
funktioniert und entsprechend benutzen.

Sprich, für den Sender: Konfiguriere UART auf 9N1 und knapp die Hälfte 
von 250kBaud (250*10/2*11), sende eine Null, "warte" auf das Ende der 
Übertragung, dann konfiguriere um auf 8N2 und 250kBaud und sende deine 
Daten.

Die Startsequenz ergibt sich dann aus Sicht des Empfängers mit der 
regulären Bitrate als Mark mit 22 Bitlängen gefolgt von einem Space mit 
etwas über 2 Bitlangen.

Der Empfänger bleibt konstant auf 8N1 mit 250kBaud. Er empfängt dann den 
Paketstart als Null mit gesetztem FE-Fehlerflag, danach einfach so ganz 
regulär die Daten.

Die zur Umsetzung nötigen Details der UART-Konfiguration entnimmt man 
einfach aus dem Datenblatt, dazu gibt's das nämlich.

von Zilog (Gast)


Lesenswert?

Wieso schickst Du nicht gleich vom Lichtmischpult die richtigen Daten?

von Fire H. (fireheart)


Lesenswert?

Hallo Forum

>Sprich, für den Sender: Konfiguriere UART auf 9N1 und knapp die Hälfte
>von 250kBaud (250*10/2*11), sende eine Null, "warte" auf das Ende der
>Übertragung, dann konfiguriere um auf 8N2 und 250kBaud und sende deine
>Daten.

Das ist natürlich ganz schlau gelöst. Genau solche Tricks habe ich mir 
irgendwie erwartet und bin auf die Schnelle nicht selber drauf gekommen.

Danke
FireHeart

von Fire H. (fireheart)


Lesenswert?

Hallo Forum

>Die zur Umsetzung nötigen Details der UART-Konfiguration entnimmt man
>einfach aus dem Datenblatt, dazu gibt's das nämlich.
Diese Details wären ja nicht das Problem gewesen. Ich hab das Datenblatt 
sogar in ausgedruckter Version zuhause ;-)

>Wieso schickst Du nicht gleich vom Lichtmischpult die richtigen Daten?
Weil das Lichtmischpult zwar ein smartes Ding ist, das eine Menge Blöcke 
und Kanäle speichern kann und die auch noch musikgesteuert in eine 
Chase-Sequenz verwandeln kann, aber natürlich nicht das, was ich gerne 
hätte.

Mein Projekt sollte saubere analoge, aktive Bandfilter für Bässe, tiefe 
Mitten, hohe Mitten, Höhen bekommen und letztendlich 8 Signale (direkt 
vom Audiomischpult über Kabel und nicht über Mikrofon) wie Pegel Summe, 
Pegel Links, Pegel Rechts, Pegel Stereosignal, Pegel Bass, Pegel 
TiefMitte, Pegel Hochmitte und Pegel Höhen auslesen können und bestimmte 
Lampen dann als VU-Meter Gruppe oder als Lichtorgel, oder oder oder ... 
ansteuern können... und das können die handelsüblichen Lichtmischpulte 
eben nicht. Da diese aber wiederum schöne Schieberegler und viel anderen 
Firlefanz besitzen, möchte ich mein Gerät auch nicht völlig autark 
betreiben, um mir all diese Funktionen einzusparen.

...und wir würden uns alle nicht in dieser Gruppe aufhalten, wenn wir 
bloß fertige Geräte kaufen würden.

Grüße
FireHeart

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Sowas hatte ich vor einiger Zeit mal angefangen, wollte aber deutlich 
mehr als das. Mal sehen, vielleicht baue ich das noch wenn ich 
irgendwann mal Lust habe, eine SD-Karte mit einem AVR (oder dann größer) 
auszulesen sowie genug C oder C++ gelernt habe, um das PC-Programm zu 
schreiben, was die Daten für das Gerät aufbereiten kann.

von D. Z. (zoundgalaxy)


Lesenswert?

Hey,

eventuell solltest du mal über Daslight usw nachdenken. Da gibt es DMX 
Programme, die das schon komplett fertig machen. Nur noch mit einem 
Merker dann Pult und PC verbinden und ab geht der Peter. So hatte ich es 
vor Jahren mal gemacht.

Je bedarf ne Midi Clock und eventuell ein FaderBoard.... dann ist der PC 
wie das Pult, blos 1000 fach besser aber Geschmacksache.

#grandma_ist_und_ bleibt_grandma

von Fire H. (fireheart)


Lesenswert?

Hallo Forum

Was ich so gefunden hab, gibt's offenbar eine DMX_OUT_LIB.ASM und eine 
DMX_IN_LIB.ASM (oder zumindest so ähnlich), die ich aber nirgends zum 
Download finden konnte. Hat da jemand einen Link?

Grüße
FireHeart

von Sebastian R. (sebastian_r569)


Lesenswert?

Schau dir mal die DMXSerial-Lib von Matthias Hertel an:
https://github.com/mathertel/DMXSerial/blob/master/src/DMXSerial.cpp

Das müsste man eigentlich sehr einfach in normales C und für andere 
Controller portieren können. Auch die Adaption auf 2 UARTs ist recht 
übersichtlich.

von H.Joachim S. (crazyhorse)


Lesenswert?

Fire H. schrieb:
> Mein Projekt sollte saubere analoge, aktive Bandfilter für Bässe, tiefe
> Mitten, hohe Mitten, Höhen bekommen

Das solltest du dir noch mal überlegen. Solche Sachen bekommt man viel 
besser und vor allem flexibler digital hin. Wird allerding auf einem AVR 
nichts gescheites, da brauchts bisschen mehr Rechendampf.

von Sebastian R. (sebastian_r569)


Lesenswert?

Fire H. schrieb:
> und das können die handelsüblichen Lichtmischpulte
> eben nicht

DMXControl 2 könnte es mit dem Audio-Analyzer. Inkl. Signal vom Line in.

Der Grund, weshalb Lichtpulte das nicht können: Niemand, der ein 
Lichtpult nutzt, möchte wildes Lichtorgel-Geflacker haben. Sobald es 
jemanden gibt, der das Licht bedient, hat man damit auch jemanden, der 
für Chaser und Effekte die Geschwindigkeit korrekt einstellen kann. 
Sound-to-Light ist ab einem gewissen Punkt extrem verpönt.

von Fire H. (fireheart)


Lesenswert?

Hallo Forum


>Das solltest du dir noch mal überlegen. Solche Sachen bekommt man viel
>besser und vor allem flexibler digital hin. Wird allerding auf einem AVR
>nichts gescheites, da brauchts bisschen mehr Rechendampf.
Ich hab vor zwei Jahren mal genau diese analogen Filter schon für ein 
32LED Lichteffektgerät gebaut und könnte (vermutlich) einen Großteil des 
Layouts (dessen Entwicklung für mich nämlich die fadeste Arbeit ist) 
kopieren.
Da ich beruflich sehr viel programmiere, interessiert mich die Software 
bei meinen Selbstbauprojekten eher nicht....da will ich was zum Löten 
und Angreifen haben. Außerdem stimmt der Einwand, dass der Atmel da 
etwas zu schwach sein könnte.

>Der Grund, weshalb Lichtpulte das nicht können: Niemand, der ein
>Lichtpult nutzt, möchte wildes Lichtorgel-Geflacker haben. Sobald es
>jemanden gibt, der das Licht bedient, hat man damit auch jemanden, der
>für Chaser und Effekte die Geschwindigkeit korrekt einstellen kann.
>Sound-to-Light ist ab einem gewissen Punkt extrem verpönt.
Mein oben angeführtes 32LED Projekt hat bis jetzt alle Besucher 
begeistert, ich lasse mich diesbezüglich aber gerne belehren. Auf jeden 
Fall würde die Software auch sanfte Rampen bekommen, um "wildes 
Geflacker" zu vermeiden.

Grüße
FireHeart

von Sebastian R. (sebastian_r569)


Lesenswert?

Fire H. schrieb:
> ich lasse mich diesbezüglich aber gerne belehren

Ich sag ja nicht, dass es nicht nett aussehen oder funktionieren kann. 
Nur wer ein Lichtpult nutzt, nutzt kein S2L, daher unterstützen Pulte 
das nicht. Das meinte ich damit.

Knapp über Lichtorgel-DJ geht es dann schon mit der manuellen 
Lichtsteuerung los. Danach kommt erstmal sehr lange gar nichts und dann 
kommen timecodegesteuerte Lichtshows, die man auch irgendwie als Sound 
to Light sehen kann.

Ich nutze für 8 LED-PARs, 2 Moving Heads und ein bisschen Kleinkram 
DMXControl mit einem Novation Launchpad als Midi-Controller. Die 
wichtigte Funktion ist der Tap-Button, um die Geschwindigkeit der Chaser 
und Effekte vorzugeben.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

H.Joachim S. schrieb:

> Das solltest du dir noch mal überlegen. Solche Sachen bekommt man viel
> besser und vor allem flexibler digital hin.

Ja.

> Wird allerding auf einem AVR
> nichts gescheites, da brauchts bisschen mehr Rechendampf.

Ach watt. Die "Qualität", die man für eine Lichtsteuerung der 
angedachten Komplexität benötigen würde, schafft ein AVR8 noch ziemlich 
entspannt. Sogar ein Tiny (ohne Hardware-Multiplikation!), dann 
allerdings mit einigen Einschränkungen bezüglich der Flexibilität.

von Fire H. (fireheart)


Lesenswert?

>Ach watt. Die "Qualität", die man für eine Lichtsteuerung der
>angedachten Komplexität benötigen würde, schafft ein AVR8 noch ziemlich
>entspannt. Sogar ein Tiny (ohne Hardware-Multiplikation!), dann
>allerdings mit einigen Einschränkungen bezüglich der Flexibilität.

Mein bislang kühnstes Projekt war ein ATmega1284 mit 20MHz befeuert, der 
mit etwa 30kHz Audio Signale eingelesen hat, damit dann 
Chorus/Flanger/Echo/Pitch Shift  (nicht gleichzeitig) gemacht und über 
einen parallelen 2-kanal DA Wandler (Stereo) wieder ausgegeben. Das ging 
eigentlich ganz gut, aber man musste sich in den Interrupts schon die 
Assemblerbefehle aussortieren, um mit dem Timing noch zurande zu kommen.

Leider liegt das Ding jetzt auch irgendwo herum, weil ich irgendwann 
keine Lust mehr hatte, weitere Effekte zu programmieren. Diesbezüglich 
wäre ja der Spin Semiconductors FV-1 ein interessantes Teil.

FireHeart

von Fire H. (fireheart)


Lesenswert?

>Der Grund, weshalb Lichtpulte das nicht können: Niemand, der ein
>Lichtpult nutzt, möchte wildes Lichtorgel-Geflacker haben. Sobald es
>jemanden gibt, der das Licht bedient, hat man damit auch jemanden, der
>für Chaser und Effekte die Geschwindigkeit korrekt einstellen kann.
>Sound-to-Light ist ab einem gewissen Punkt extrem verpönt.

Ich hab jetzt grad eine Party mit meinen neuen DMX Leuchten hinter mir 
und hab beim Programmieren der Lichteffekte (es gab noch nichts 
Musikgesteuertes) darauf geachtet, die Helligkeiten und Farben möglichst 
sanft zu ändern, um eben kein Geflackere zu haben ... ja, es ist 
tatsächlich angenehmer ... hat irgendwie eine subtile Eleganz.

FireHeart

: Bearbeitet durch User
von Fire H. (fireheart)


Lesenswert?

Weiß zufällig jemand, ob ein 192 Kanal Lichtmischpult nach den 192 Bytes 
sofort wieder mit dem Reset beginnt (und damit eigentlich wesentlich 
schneller zyklisch Daten übertragen würde) oder ob es die "restlichen" 
320 Bytes wartet?

Im zweiten Fall hätte könnte ich zuerst die 192 Bytes lesen und in der 
Pause dann die modifizierten 192 Bytes weiterleiten. Sonst müsste ich 
parallel lesen (mit 2-3 Bytes Versatz) und schreiben.

FireHeart

von Falk B. (falk)


Lesenswert?

Fire H. schrieb:
> Weiß zufällig jemand, ob ein 192 Kanal Lichtmischpult nach den 192 Bytes
> sofort wieder mit dem Reset beginnt (und damit eigentlich wesentlich
> schneller zyklisch Daten übertragen würde) oder ob es die "restlichen"
> 320 Bytes wartet?

Ich VERMUTE mal, das kommt auf den exakten Typ an. Prinzipiell kann 
DMX512 auch mit deutlich weniger als 512 Kanälen arbeiten und dadurch 
die Frame rate erhöhen.

> Im zweiten Fall hätte könnte ich zuerst die 192 Bytes lesen und in der
> Pause dann die modifizierten 192 Bytes weiterleiten. Sonst müsste ich
> parallel lesen (mit 2-3 Bytes Versatz) und schreiben.

Das Zauberwort lautet FIFO oder double buffering.

Ich hab mal einen LED-Treiber mit 24 Kanälen a 10 Bit und Soft-PWM 
gebaut, das lief reibungslos.

Beitrag "Re: DMX Steuerung 24 Kanal"

von Sebastian R. (sebastian_r569)


Lesenswert?

Fire H. schrieb:
> oder ob es die "restlichen"
> 320 Bytes wartet?

Warten ist nicht vorgesehen. Wenn, dann würde nach 192 Bytes gleich 
wieder ein Reset und Start-Byte kommen.

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.