Forum: Mikrocontroller und Digitale Elektronik DMX Steuerung timing erzeugen


von Anna D. (annadohle)


Angehängte Dateien:

Lesenswert?

Hallo Ihr lieben,

ich habe mich auf ein Projekt gestürzt und bin damit überfordert...

Es handelt sich um eine DMX Steuerung und das Timing dazu.
Ich schaffe es nicht das Timing aus dem Bild zu erzeugen.
Ich verwende einen ATmega 8 und eine RS232 Schnittstelle. Die arbeit mit 
dem Datenblatt und die einzelnen Register sind nicht das Problem.
Es wäre Klasse, wenn jemand schonmal mit dem Atmega8 ein DMX timing 
erzeugt hat und mir dies als C- Code geben könnte.
Ich freue mich auch über Ratschläge und Hilfestellungen.
Es ist ein meiner ersten Projekte, daher ruhig ausführliche 
Hilfestellungen.

Lg
Eure Anna :-)

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

DMX ist jetzt erstmal nichts anders als normales UART mit 250kbaud.
Um den Break und MAB zu senden halbierst du diese Baudrate und sendest 
ein Nullbyte.
Fertig!

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@ Anna Dohle (annadohle)

>ich habe mich auf ein Projekt gestürzt und bin damit überfordert...

Kommt vor. Aber der Mensch wächst an deinen Aufgaben.

>Es handelt sich um eine DMX Steuerung und das Timing dazu.
>Ich schaffe es nicht das Timing aus dem Bild zu erzeugen.

Also willst du einen DMX-Sender bauen.

>Ich verwende einen ATmega 8 und eine RS232 Schnittstelle.

Naja, DMX arbeitet aber mit RS485. Das ist logisch gleich, 
elektrisch aber anders.

> Die arbeit mit
>dem Datenblatt und die einzelnen Register sind nicht das Problem.

Wo ist denn das Problem?

>Es wäre Klasse, wenn jemand schonmal mit dem Atmega8 ein DMX timing
>erzeugt hat und mir dies als C- Code geben könnte.

Aha, man ist faul und will nur kopieren. Hmmm.

>Ich freue mich auch über Ratschläge und Hilfestellungen.

Für den allerersten Versuch kann man das gaaaanz entspannt und auch mit 
"bösen" Delays machen. So ein DMX-Frame wird periodisch gesendet. Also 
eine Endlosschleife mit while(1) { . .. . }

Das Ganze geht etwa so.

IOs initialisieren.
UART initiaisieren (2 Stop-Bits)

Anfang Endlosschleife

UART TX ausschalten (damit man das IO Pin manuell steuern kann)
UART TX Pin aus LOW setzen
88us warten
UART TX Pin aus HIGH setzen
4us warten
UART TX einschalten

Anfang Kanalscheife I=0 bis 512
  Kanal I per UART senden
Ende Kanalschleife

ggf. ein paar ms warten

Ende Endlosschleife

Das Ganze darfst du jetzt als Übung in C übersetzen und testen. Dabei 
wirst du vor allem das Thema Bitmanipulation brauchen.

Viel Spaß und Erfolg.

von Joachim (Gast)


Lesenswert?

Obwohl gemäß Standard ein 88us Break genügen muss, ist es in der Praxis 
sinnvoller, einen längeren Break einzubauen, damit auch Empfänger, die 
weniger schnell sind, den Break sicher erkennen.
Viele billigen China-Geräte sind mit schnellen DMX-Signalen überfordert.
Ich würde also bei dem Verfahren der Baudratenumschaltung nicht auf 1/2 
Baudrate sondern auf 1/4 Baudrate gehen und somit einen 176us Break 
senden.
Auch ist ab und zu eine gewisse Wartezeit zwischen den einzelnen 
Sendedaten sinnvoll.
Viele Billiggeräte benutzen noch 8051 Kontroller mit einfach gepufferter 
UART und können die Daten nicht schnell genug einlesen. Ein paar 
Bitzeiten Pause zwischen den Datenbytes können daher nicht schaden.
Also wenn die Übertragungsrate nicht das Problem ist, dann so langsam 
senden wie möglich.

Gruß

Joachim

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Joachim schrieb:
> Viele Billiggeräte benutzen noch 8051 Kontroller mit einfach gepufferter
> UART und können die Daten nicht schnell genug einlesen.

Wenn ein Gerät dem DMX-Standard nicht entspricht, dann darf es nicht so 
heißen und als solches auch nicht verkauft werden. Theoretisch...

Will sagen: Wenn man sich beim Senden an den Standard hält, dann ist man 
auf der sicheren Seite. Zusätzliche Delays kann man sich dann sparen. 
Die 2 Stoppbits sind genug "Idle", um das nächste Startbit zu erkennen. 
Die Empfänger können mit 1 Stoppbit arbeiten und haben so 1 Bit mehr 
Zeit, um das vorangegangene Byte zu verarbeiten oder wenigstens weg zu 
speichern.

von Stefan K. (stefan64)


Lesenswert?

Nachdem das DMX-Format sicher schon 30 Jahre auf dem Buckel hat, sollte 
es für moderne Microcontroller eigendlich kein Problem mehr sein, DMX 
ohne Zusatzdelays zu empfangen.

Gruß, Stefan

von Dussel (Gast)


Lesenswert?

Knut B. schrieb:
> Wenn ein Gerät dem DMX-Standard nicht entspricht, dann darf es nicht so
> heißen und als solches auch nicht verkauft werden. Theoretisch...
Wenn es dreipolige Stecker und Buchsen verwendet, entspricht es nicht 
dem Standard (zumindest bis vor wenigen Jahren, vielleicht hat sich da 
was geändert)…

Joachim schrieb:
> Obwohl gemäß Standard ein 88us Break genügen muss, ist es in der Praxis
> sinnvoller, einen längeren Break einzubauen, damit auch Empfänger, die
> weniger schnell sind, den Break sicher erkennen.
Ich habe mich auch mal mit DMX beschäftigt, bin aber nie darauf 
gestoßen, dass der Break länger sein soll. Es wurde nur geraten, einen 
Kanal nicht zu oft anzusprechen, weil eventuell der Controller mit der 
Verarbeitung nicht schnell genug ist. Wenn man deutlich weniger als die 
512 Kanäle sendet, sollte man eine längere Pause machen, um den 
Controllern Zeit zu geben. In wie weit das heute noch wichtig ist, weiß 
ich nicht.

von Joachim (Gast)


Lesenswert?

Sollte, müsste, darf nicht..
Es war nur ein Tip aus Erfahrung. Mehr nicht!


Gruß

Joachim

von Jan K. (madengineer)


Lesenswert?

Ja einige chinesische Geräte sind echt sehr freizügig in der Auslegung 
der Spezifikation und mit modernen Controllern muss man da auch nicht 
kommen. Da geht es meistens nur um das billig und 8051er findet man da 
des öfteren. Da hat der Joachim schon recht.
Interessant sind da auch die DMX Controller von dort. Da ist das Break 
auch mal etwas länger, es gibt mal Päuschen zwischen den Datenbytes oder 
es dauert mal fast eine Sekunde bis nach dem Wackeln am Fader auch die 
passenden DMX-Daten über die Leitung kullern.
Hat mich mal ein paar Stunden unnötige Fehlersuche in meinem eigenen DMX 
Code gekostet, bis ich mir mal meine Signalquelle näher eingeschaut 
habe. Jetzt ist ein Atmega32 in dem Faderboard drin :-D

von Daniel B. (dbuergin)


Lesenswert?

And den TO:

Wenn Du schon fertigen Code willst, nimm  gleich einen Arduino
und die DMX Lib: http://playground.arduino.cc/Learning/DMX
und gut ist.
Läuft bei einem Kollegen sei längerem ohne Probleme mit über hundert 
Nodes.

G.D.

von EF3A (Gast)


Lesenswert?

Hallo Anna.

Haben wir doch alles im Unterricht gemacht!?

L.G. Stefan und Niko ;)

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.