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 :-)
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
@ 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.
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
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.
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
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.
Sollte, müsste, darf nicht.. Es war nur ein Tip aus Erfahrung. Mehr nicht! Gruß Joachim
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.