Forum: Mikrocontroller und Digitale Elektronik DMX==>>UART (AVR)


von Timo U. (firebuster)


Lesenswert?

ich bin auf der suche nach einer software die
das DMX signal einliest und den wert von einem Kanal, der mit einem
Jumper eingestellt wird über die UART ausgiebt...
.. optimal wäre wenn gleich mehrere Kanäle ausgelesen werden könnten.

Auf DMX4All.de habe ich eine Platine geshen die das signal binär
ausgiebt was auch noch interessant wäre.

vielleciht hat ja einer von euch eine DMX-erkennung am laufen und kann
mir das programm grade so umändern dass der wert ausgegeben wird, da
ich gelesen habe das die Basic-Sprache nicht grade das beste für die
DMX-verarbeitung ist und ich leider keine ander behersche.

Thx Timo

von Thilo (Gast)


Lesenswert?

Hi, guck doch da mal nach:
http://www.hoelscher-hi.de/hendrik/

von Timo U. (firebuster)


Lesenswert?

thx aber die seite kenn ich auch schon
das problem ist dass keine PWM oder so brauch sonden einfach nur die
werte
zudem wäre mir ein atmega8 am leibsten
(wird wahrscheinlich auch bei dmx4all verbaut)

aber schon mal danke ...

von Thilo (Gast)


Lesenswert?

Na, wenn Du die Seite kennst, dann müsstest Du ja auch die Technik
kennen: einlesen der DMX-Bytes über UART. Ist ja nur der RS485-Baustein
vorgeschaltet, sonst nix. Die Baudrate muss beim entsprechenden Quarz
auf 1Mbit eingestellt werden, dann funktioniert's tadellos. Ich würde
beim mega8 16MHz empfehlen, damit noch genug Code zwischen den
empfangenen Bytes ausgeführt werden kann.

von Reinhard B. (brainstorm)


Lesenswert?

Hi,

DMX fährt mit 250kBit/s nicht mit 1MBit/s!

mfg
Reinhard

von Thilo (Gast)


Lesenswert?

Habe ein COEMAR DMX-Lichtpult, das fährt mit 1 MHz => 1 Mbit! Mit
entsprechender Einstellung am AVR funktioniert's auch!

von Reinhard B. (brainstorm)


Lesenswert?

Hi nochmal,

Natürlich funktioniert die Übertragung, wenn mit 1 MBit gesendet wird
und der Empfänger auf 1 MBit eingestellt wird. Wäre ja traurig, wenn
nicht ;-) Kann es sein, dass die 1MHz nur dann verwendet werden
(können), wenn auch Coemar Fixtures verwendet werden?

Fakt ist, DMX (im aktuellen Standard) verwendet 250kBit. Wollte jetzt
eigentlich von der USITT was posten, allerdings sind die Docs
kostenpflichtig.

Eine möglichst glaubwürdige Seite im Netz zu finden ist auch garnicht
so einfach, aber ich verweise jetzt mal dahin:
http://www.hbernstaedt.de/KnowHow/DMX2/DMX2.htm

Unter dem Punkt "Kabel" wird immerhin auf USITT und EIA485
hingewiesen.

mfg
Reinhard

von Timo U. (firebuster)


Lesenswert?

@Thilo
das ist ja mein problem!
ich weiß nicht wie ich das signal im avr verarbeiten soll weil ich das
programm ja in asm schreiben müsste !?!?

am liebsten wäre mir ja ein Atmega8 mit einem 8Mhz Quarz
(den benutz ich meistens)
das dürfte ja auch keine probleme bereiten

von Stefan (Gast)


Lesenswert?

In der aktuellen Elektor ist ein Selbstbau DMX/USB Interface
beschrieben. Die Homepage des Autors ist www.oksidizer.com

von Timo U. (firebuster)


Lesenswert?

@stefan
ich suche was umgekehrtes
ich will im prinzip ein byte aus einem DMX-Signal auslesen und ausgeben

von Thilo (Gast)


Lesenswert?

Wie gesagt: den UART mit der richtigen Baudrate initialisieren
(Interruptgesteuert, versteht sich) und das Startzeichen auswerten.
Dann nur noch die empfangenen Bytes mitzählen und bei den
entsprechenden Bytes die gewünschten Aktionen ausführen.

von Stefan (Gast)


Lesenswert?

@ Timo
Ah ja. Sorry wenn ich Verwirrung ausgelöst habe!

von Timo U. (firebuster)


Lesenswert?

kann ich das auch mit bascom schreiebn ?

von TravelRec. (Gast)


Lesenswert?

Vergiß Bascom. Bei Hendrik auf der Page gibt´s den kompletten Quellcode
in ASM - der Geschwindigkeit wegen. Leicht abgewandelt kannst Du dann
das machen, was Du willst. Wenn Du einen Mega162 nimmst, der 2 USARTS
hat, kannst Du ohne viel Ärger auf dem einen das DMX-Signal empfangen
und über das andere an einen PC die Werte senden. Du mußt nur beachten,
daß DMX mehr als doppelt so schnell ist, wie die höchste PC-übliche
Baudrate. Ohne Zwischenspeichern im SRAM des Controllers wird das also
nix.

von Timo U. (firebuster)


Lesenswert?

ich weiß nicht ob ich mich irgendwie nicht wichtig ausgedtückt haben
!??!?
ich will dicht das komplette DMX siganl ausgeben sondern nur einen
kanal
d.h wenn zb. der 1. kanal den wert 250 hat und er 2. kanal 10 ... etz
.
soll der AVR, wenn der 1. kanal eingestellt ist nur 250 über die uart
senden
dieses signal will ich dan mit einem andern AVR in das umwandeln wofür
ich es brauche..
dei 2 AVR's deswegen wil ich kein asm kann und auf dem 2. avr auch mit
basic progammieren kann
wenn der 1. AVR das signal binär ausgiebt kann ich damit auch noch
leben...

Thx Timo

von Reinhard B. (brainstorm)


Lesenswert?

Hi Timo,

Weiss nicht genau, auf wen oder was sich dein letzter Beitrag bezogen
hat.
Wenn's ums mitzählen geht: Dass musst du machen, denn nur so weißt du,
für welchen Kanal gerade der Wert empfangen wurde.

mfg
Reinhard

von TravelRec. (Gast)


Lesenswert?

Machen kann man alles - wenn Du nicht für Vorschläge offen bist - nicht
mein Problem. Wenn Du Dich mit ASM nicht beschäftigen magst - bitte...
Wenn Du Deinem Wunsch auch irgendwie anders nahekommen kannst, warum
nicht. Alles was Du oben schriebst, kann man mit einem Controller
machen - 2 gehen auch; 10 gehen auch. Mach wie Du denkst.

von Thilo (Gast)


Lesenswert?

@Timo:
Ich werde den Verdacht nicht los dass Du das DMX-Prinzip nicht so recht
verstanden hast.
Dabei wird ein Startzeichen gesendet und anschließend 512 (evtl. mehr
oder weniger) Bytes in Folge. Das wiederholt sich immer. Der Empfänger
wird auf eine bestimmte Adresse eingestellt und zählt die Bytes ab dem
Startzeichen mit. Ab der eingestellten Adresse wertet er dann eine
festgelegte Anzahl Bytes aus.
Falls Du das anders machen willst, solltest Du das Ganze nicht DMX
nennen, ich denke die Meisten hier im Thread sind vom DMX-Standard
ausgeganen (verschiedene Aufgabenstellungen). DMX hat auch eine Norm,
an die solltest Du Dich schon Halten (z.B.Startzeichen 4 bzw. 8µs).

von Timo U. (firebuster)


Lesenswert?

Grund für deise Schaltung:
Die schaltung soll eienn demultiplexer ergeben.
Die Platine mit dem AVR soll zb. in eine Nebelmaschie ..
Die Nebelstärke soll mit einem DMX kanal mit einem ganz normalen DMX
Pult gesteuert werden.
da ich auch noch andere Efekte mit DMX ausstatten will und nicht von
jemand anderm verlangen will, dass er mir sämtliche codes zu schreibt,
habe ich mir üerlegt, dass ich einen AVR nehme, an diesem mit einem
dip-schalter  einen kanal zuweise und der soll dann den wert von diesm
kanal so ausgeben dass ich ihn mit einem 2. AVR  den ich dan selbst mit
basic programmieren kann weiterverarbeiten kann (dimmen/schalten....)

wenn es probleme mit dem einlesen vom dmx und dem ausgeben vom wert
giebt wäre es auch nicht schlim wenn der kanal über 8 Pins binär
ausgegeben wird wie es hier als 2. aufgeführt ist:
http://www.dmx4all.de/data/demux8_de.pdf#search=%22dmx%20demultiplexer%22

ich hoffe das ihr jetzt mein vorhaben verstanden hat und mir einer

von Markus Cords (Gast)


Lesenswert?

@Timo

[Zitat start]
da ich auch noch andere Efekte mit DMX ausstatten will und nicht von
jemand anderm verlangen will, dass er mir sämtliche codes zu schreibt,
[Zitat ende]

Also Du kannst doch mit einem AVR das DMX auswerten und auch die
anderen sachen damit machen.

Das Prinzip ist halt so, das jedes Gerät (Nebelmaschine, Effect usw.)
einen eigenen DMX Empfänger hat!

lg, markus

von Timo U. (firebuster)


Lesenswert?

ja so hab ich das ja vor .. das DMX signal wird >>NUR IM ENDGERÄT<<
ausgelesen und umgewandelt!

und wie gesagt die 2µC's benute ich nur weil ich nicht fähig bin den
code dafür in asm zu schreiben und hoffe das mir jemand eine Hex-datei
schicken kann...
um aber selbst die steuerung für die endgeräte aufzubauen benute ich
den 2. avr
thx Timo

von Markus C. (ljmarkus)


Lesenswert?

es ist so einfach das der AVR den Empfang macht und auch die Portpins
dafür schaltet.

asm ist einfach.
Schaue dir dieses hier mal an:
http://www.hoelscher-hi.de/hendrik/light/ressources/AN012.pdf

da wird es super einfach beschrieben wie es geht.


lg, markus

von Timo U. (firebuster)


Lesenswert?

naja .. DMX auswerten ist nicht unbedingt das womit man anfangen
sollte... aber da ich nicht unbedingt soviel zeit hab um die sprache zu
lernen habe ich gehofft das mir jemand die software schreiben kann.

Ich weiß das es eigendlich nicht schwierig ist doch wenn man mit der
programmiersprachen nicht viel zu tun hat ist es auch nicht gerade
leicht ;-)
wenn man ein programm am laufen hat ist es ja kein problem den wert auf
den Ausgang zu legen.... zumindest für jemanden der die
programmiersprache beherscht.


es wäre net wenn mir jemad die hex dafür zuschicken kann

thx Timo

von Markus C. (ljmarkus)


Lesenswert?

welchen AVR willste denn nehmen.
wie soll der eingestellte kanal ausgewertet werden ?

von Timo U. (firebuster)


Lesenswert?

als avr würde ich am liebsten einen atmega8 nehmen mit 8mhz Quarz
( weil ich den für fast alle anderen projekte auch benutze..)
der eingestellte kanal soll entweder mit einer normalen
geschwindigleit
über UART oder binär über 8 Pins ausgegeben werden.. beiders wäre
natürlich besser aber nicht unbedingt notwendig

Thx. Timo

von Markus C. (ljmarkus)


Lesenswert?

schick mir mal ne email: ljmarkus(at)gmx.de

von Joachim Reiter (Gast)


Lesenswert?

Hi, also ich habe 2004 einen DMX-Tester mit LCD-Ausgabe und einem
8MHz-8515-Atmel unter BASCOM ohne Probleme gebastelt. Der Empfang ist
unkritisch, da der UART den Empfang handelt und einen Interrupt
auslöst. Der Empfang der Daten läuft ganz normal über die serielle.
Auch die Funktion gezielt einen Kanal anzuzeigen ist schon drin.
Wenn dann das ganze per serielle an den PC übertragen werden soll kann
man ja beim BASCOM zusätzlich den Software-UART einsetzen.
Da reicht ja vielleicht bei einem Kanal 9600 Baud.
Den Sourcecode findest du z.B. unter
http://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=163723

Vielleicht hilft dir das ja weiter.

mfg.
    Joachim

von Daubes (Gast)


Lesenswert?

Hi Leute,
habe mir mal das grad alles durchgelesen und so.. ich bin derzeit dabei
eine Strobsteuerung zu bauen. Mit einem analogen Eingangssignal klappt
des auch echt voll gut... als µC verwende ich einen AT89S52 - nun will
ich das ganze mal auf DMX umstellen. Also praktisch einfach statt den
Wert vom A/D-Wandler einen DMX-Wert. Hardwaremäßig ist auch alles
klar... Software ist so ne Sache.. und zwar einen einfachen Quellcode
der einen DMX-Kanal ausließt. Ich weis zwar dass www.hoelscher-hi.de
das schon supi erklärt hat, aber ich glaube, insbesondere Timo, will es
in "Normgerechter" ASM-Sprache.. des ist auch der Grund warum ich das
Beispiel von von www.hoelscher-hi.de nicht so ganz verstehe... (Die mit
Mov,Add,Call,Jz, usw....)

Am besten Wäre es wenn man für r1 die Adresse annimmt die ausgelsen
werden soll - ich weis dann geht 256-512 nett, was aber erst mal egal
ist... und in r2 dann den Wert wieder zurück gibt wo eben der monentane
DMX-Wert ist... ich glaube des würde vielen, auch mir, sehr viel weiter
helfen... von mit aus können auch einfach alle empfangen werte in einen
Steicher und man liest dann via Datenpointer den entsprechnden wieder
aus... Zusätzlich gut wäre es auch wenn man im programm einfach am
anfang für den takt eine zahl eingibt - sei es 8 für 8MHZ oder 12 für
12MHz - so hätte man ein für alle mal eine Art Programm, wo man für
alles nehmen kann...

Gerade wenn man mit Datenpointern arbeitet kann man schnell auf den
gerade benötigten Wert zugreifen..

So und warum baue ich des ganze - weil ich zwar DMX-Strobs habe ahber
die haben meist einen Kanal für die Helligkeit und einen für die
Geschwindigkeit... aber helligkeit ist eh meist bei 100% und wenn man
des im Pult fest einstellt blitzen sie halt alle 2 Sekunden oder so..
des ist sch*****! Deswegen analoge.. wenn man da aber einen normalen
D/A-Wandler nimmt reagieren sie nur auf ansteigende Taktflanken.. des
heißt man brauch pro blitz 2 scenen. Verwendet man eine Lightoperator
48 von GLP der ne maximal Gesch. von 0,1sec hat, dann ist des net
besonders schnell - Trommelwirbel schirr unmöglich.. ließt man nur ein
analoges signal ein ung gibt mit zunehmender spannung eine höhere
freqeunz aus - sogar blindereffekt leicht möglich ;-) ist des schon mal
um einiges besser - kann ja für einen niedrigen wert einfach keine
impulse ausgeben... aber nun noch was des ganz ein bissel besonders
macht.. man speichert ja einfach auf jeden kanal eine scene.. pro flash
egal in welchen wert kommt ein Ímpuls. Und die nächste Steigerung ändert
man einen Wert im Bereich zwischen 15-255 geht er in so ne art
Trommelwirbel - sprich solange sich die werte ändern bibt er die
maximale Freqenz aus.. für Livelicht echt das beste.. muss net immer
rigendwelche knöpe im pult für jede funktion suchen...

So wäre für ne Hilfe sehr dankbar...

Grüßle

von Henne (Gast)


Lesenswert?

Moin,

Da AVR-Assembler hier wohl nicht auf allgemeine Begeisterung stößt g,
habe ich mir erlaubt den ganzen Kram nach C zu portieren und in mein
neues Forum zu klatschen.

Die Effizienz ist im Vergleich zu ASM zwar immer noch deutlich
schlechter - aber doch inzwischen erträglich.

(Den Kram sehen nur registrierte User, damit ich etwas Überblick über
das allgemeine Interesse an dem Kram habe...)

Viele Grüße, hendrik

von Henne (Gast)


Lesenswert?


von Thorsten D. (daubes)


Lesenswert?

Hi,
öhm Henne ich sehe des leider net.. also hier bin ich angemeldet... auf
deiner Homepage kann man sich ja net anmelden oder?

von Henne (Gast)


Lesenswert?

Ähh - doch.
Wie gesagt steht der Kram in meinem Forum. und dort kann man sich wie
üblich registrieren...

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.