Wie ist der Zeitliche Protokollablauf eines DMX-Signals?

Guten Tag,
ich muss für die Schule einen Microcontroller so Programmieren, dass ich eine bzw. mehrere Lampen in einem DMX-Bus-System ansprechen kann! Das internet ist dabei leider nicht unbedingt hilfreich, da auf jeder Webseite entweder 1:1 das gleiche, wie in WIkipedia, oder etwas komplett anderes steht! ich hab alles schon mal ausprobiert, aber nichts funktioniert irgendwie!
Ich bräuchte daher mal n bisschen Hilfe!

Hallo!

Wiki scheint erstmal ne recht solide Beschreibung zu liefern, und ich wäre erstmal geneigt, mich vorerst daran zu halten.

Bist du dir denn überhaupt sicher, daß du auch die Signale erzeugst, die du erwartest?

Erstmal brauchst du nen Treiberbaustein wie vermutlich diesen, der aus den elektrischen Signalen des Mikrocontrollers (z.B. 0V, 5V) eben das differenzielle macht. Ich würde da gar nicht erst anfangen, was eigenes zu basteln.

Und dann ist die Frage, ob aus dem Microcontroller auch das raus kommt, was du dir vorstellst. Nicht, daß du z.B. vergessen hast, den Pin als Ausgang zu definieren.
Im Grunde mußt du am Anfang einer Nachricht ja auf Ausgang schalten, dann für ne gewisse Zeit ne 0 und ne 1 raus geben, dann auf UART mit entsprechender Konfiguration umschalten, und dann die Bytes raus geben. Bist du dir sicher, daß das auch so passiert, und daß das TIming stimmt?

Hast du dir die Signale mal mit einem Oszilloskop angeschaut und penibel kontrolliert?

Und möglicherweise hast du ja auch einen originalen DMX-Sender. Den kannst du auch mal mit nem Oszilloskop belauschen, dann siehst du vor allem auch, ob Wiki recht hat.

Vielen Dank für die schnelle Antwort!
ich habe eben genau diesen Baustein, mein Port ist als ausgang definiert! ich sende außerdem über die Serielle Schnittstelle mit exakt 250 kboud und es sollte auch das raus kommen! zumindest am Port! Kann es sein, das der Baustein zu langsam ist? eigentlich nicht! oder?
ich halt mich dann mal an wiki und schau mal ob ich irgendwo nen Mischpult her bekomme und untersuch das nochmal mit nem oszi!

Hallo!

wenn es exakt dieser Baustein ist, dann kannst du laut Datenblatt, Abbildung 19 etwa 1000 Fuß lange Kabel verwenden, also 300m. Sollte wohl reichen.

Wie sicher weißt du, daß du wirklich mit 250kBaud sendest? Eine typische Falle in einem Microcontroller ist, daß die Taktfrequenz des Microcontrollers nicht die ist, die du annimmst. Und da die eingestellte Baudrate sich aus der Taktfrequenz berechnet, ist sie dann auch anders als gedacht.

Und am Anfang jeder Nachricht mußt du ja erstmal mit nem reinen digitalen Ausgang arbeiten, um für mindestens 92µs 0V am Microcontroller rauszugeben. (Was für einen Microcontroller nutzt du eigentlich?)

Auf Seiten des TreiberICs: DE muß mit Vcc verbunden werden, damit der überhaupt aktiv ist. Wenn du grade kein Oszi zur Hand hast: Wenn du den Ausgang am Microcontroller auf 1 setzt, solltest du am Ausgang A des ICs auch Spannung messen, und bei 0 entsprechend keine Spannung.
Und um zu prüfen, ob dein UART funktioniert, schreibst du in einer Endlosschleife ohne Pause ein Byte wie0xC0raus. Dann sollte sich am Ausgang ne mittlere Spannung zeigen, die deutlich mittig zwischen 0V und Versorgungsspannung liegt. Aber wie gesagt, wenn du ein Oszi hast, ist das besser als ein Multimeter.

Nützt aber nix, falls du ihn explizit als Uart definieren mußt :wink: Welchen Controller hast du denn? Und wie initialisierst du das Teil?

Das denk ich mir auch jedes Mal, und nach einem halben Tag hat man das verfluchte falsche Bit gefunden - aber sonst war alles richtig!

Glaub ich nicht. Für den zeitlichen Ablauf ist die auf Wikipedia verlinkte Seite http://www.soundlight.de/techtips/dmx512/dmx512.htm doch schon mal ein guter Anfang.

Ansonsten ist der Tip mit dem Oszi zu beherzigen. Für solche Frequenzen tut’s das billigste USB-Scope.

Gruß,

Kannitverstan