Forum: Mikrocontroller und Digitale Elektronik DMX512-Signal mit µC verarbeiten


von pa-tom (Gast)


Lesenswert?

Hallo Leute,

ich habe eine Frage. Ich möchte gerne ein DMX512-Signal (evtl. bekannt
aus der Veranstaltungstechnik) über einen µC empfangen und sinnvoll
weiterverarbeiten.

Das DMX512 ist ein Serieller Datenbus. Es werden 512 Pakete zu je 8 Bit
übertragen. Natürlich mit sämtlichen Kontroll-Bits, die so benötigt
werden.

Ziel dieses Vorhabens ist es für mich Schrittmotoren und LED´s über
DMX512 anzusteuern und auf diesem Wege fundierte Erfahrungen in der
µC-Technik zu sammeln.

Bis auf einige Grundlagen in Assembler und C/C++ bin ich auf diesem
Gebiet ziemlich jungfräulich unterwegs. Ich brauche also auch Tipps
über benötigte Hardware und dergleichen.

Es wäre super, wenn sich jemand mit dieser Materie auskennt und mir auf
die Sprünge helfen kann. Bitte nur sachliche Antworten.

Gruß


Tom

von Jürgen Berger (Gast)


Lesenswert?

schau hier mal:

http://www.hoelscher-hi.de/hendrik/wahl.htm

Gruß
Jürgen

von Sven Müller (Gast)


Lesenswert?

Moin!

Hennes Seiten sind schon ein guter Tip für die Hardware.
Du brauchst als Basis Hardware einen µC (z.B. Mega8) und einen RS485
Bustreiber (z.B. SN75176) und einen 8MHz Quarz.
Die beschaltest du geeignet und schreibst die Software. (faulerweise
mache ich das in C, Henne in Assembler.)
Machst du sie auch in C kann ich dir gerne helfen.

von mc.emi (Gast)


Lesenswert?

kleiner tip: guck mal im datenblat die RS232-schnittstelle an -
zumindest bei den PICs kannste noch kontroll-bits (o.ä.) anfügen, dann
muste nur noch den tackt anpassen, einen interrupt festlegen für den
reset, pakete zählen und fertig. ok, wird schon noch was arbeit kosten,
aber ist sicher einfacher als zu pollen ...falls das der AVR diese
zusätzlichen bits unterstützt.

von Ralph (Gast)


Lesenswert?

Hi,

meine Strategie (in C)

UART Parameter einstellen.
Interrupt-Handler für Empfang schreiben. Hier drin eine StateMachine
aufbauen.
Erster Status wird erreicht mit Daten=0 und Framing Error. Kommt im
reset, weil der länger ist als die normale Packetlänge, d.h. Stoppbit
kommt nicht.
Zweiter Status: Daten=0 und kein Framing Error (für Startcode).
Dann in Status 3: Daten empfangen, Kanäle mitzählen!
Bei einigen DMX-Sendern werden nicht 512 Kanäle übertragen oder die
Pause zwischen zwei Bytes oder Frames sind sehr lang. Deswegen der
Einsprung bei reset mit Framing Error.

Habe ich inzwischen lange auf AVRs und MC16 laufen. Geht gut und
schnell genug in C. Interrupt Handler MUSS die höchste Priorität (Falls
einstellbar) haben.

Viele Grüße Ralph

von Sven Müller (Gast)


Lesenswert?

Genau ich mache es nicht anders als Ralph. du musst im Prinzip nur auf
einen FE warten und dann mitzählen.

von Kai Markus Tegtmeier (Gast)


Lesenswert?

Wäre es möglich, den Sourcecode in C mal hier zu veröffentlichen?
Ich hatte früher schon mal etwas in C versucht, allerdings
mit einer anderen Strategie, die leider nicht geklappt hat. Deshalb
würde mich ein funktionierender Sourcecode in C mal interessieren...

Greetz
kmt

von AxelR. (Gast)


Lesenswert?

einloggen geht nicht - egal

Such mal nach DMX.
Ich habe eben das hier gefunden - ist zwar nicht C aber sollte trotzdem
umsetzbar sein. Brauchst ja nur den Chip brennen :-))

von AxelR. (Gast)


Lesenswert?


von Kai Markus Tegtmeier (Gast)


Lesenswert?

Ich bin leider mit BASCOM nicht so firm (obwohl die Syntax ja wirklich
fast selbsterklärend ist), insofern bin ich nach wie vor sehr an
einem Beispiel in C interessiert. Trotzdem aber vielen Dank für die
Anregung!

Greetz
kmt

von Michael Wilhelm (Gast)


Lesenswert?


von Thomas T. (pa-tom)


Lesenswert?

Hallo Leute,

vielen Dank erstmal für eure Antworten.

An Sven Müller:

Ich wäre dir sehr verbunden, wenn du mir da helfen könntest.

Würdest du dich bitte per email an mich wenden?

Gruß


Tom

t.trojak@gmx.de

von Henne (Gast)


Lesenswert?

Wurde nicht bereits alles gesagt und bereits (ziemlich hübscher) C-Code
gepostet?

Woran hakelts denn??

BTW: Mein ASM-Code läuft @8MHz in <3µs durch (ich glaube es waren sogar
ca. 1.6). Dies habe ich in C nie erreicht.

C ist ungeschlagen für hübschen Code bei komplizierteren Abläufen
(String handling, 2D-Engine, Temp.sensoren) und wenn es portabel sein
muss.

Wenn es einfach nur um brachialen Durchsatz bei Kleinkram (state
machine) geht: Bitte mal kurz schauen, ob nicht ein asm-include
interessanter ist. Noch deutlicher wird das bei PWM- oder
BAM-Routinen.

Ich möchte keinen Streit um C vs. ASM heraufbeschwören, nur: bitte
verliert assembler nicht völlig aus den Augen - ich habe den Code nicht
aus Masochismus verzapft ;-)

BTW:
Wir haben inzwischen eine neue C-Engine im paforum entwickelt, als es
um einen (angeblichen) Bug in meinem Transceiver ging (war glaube ich
in 'Selbstbau Technik'). Die Engine lief auf 9n1 und war äußerst
elegant und noch eine Nummer sicherer in der BreakDetection...

Viele Grüße, Hendrik (henne)

Etwas versteh ich noch nicht:
Es ging primär um LED-Controlling. Wieso ziehst Du nicht einfach mein
fertiges *.hex, bügelst es auf den Transceiver und bist glücklich? Seit
gut 2a wird der Code immer weiter verfeinert und sobald ich mal Mist
baue, kriege ich 1Tag später ein Dutzend Protestmails. Dazu kann ich,
wenn Du Probleme mit Ätzen etc. hast, die Platine für ein paar €
stellen. (Nur die source gibt es halt nicht - die alten Hasen hier
können sich denken warum...)
zum Stepper:
In der Zeit, die Du bei der LED-Geschichte sparst, könntest Du mir bei
den Steppern helfen: Ich habe einen 16bit 2Achsen-Code, den ich aber
noch nicht wirklich perfekt finde (zwischen zwei Halbschritten macht
die PWM-Engine einen kleinen Sprung, der mit Laserpointer auf Spiegel
in 5m Entfernung sichtbar ist -> NERVT) und ich bräuchte auch noch eine
zündene Idee zum Indexing der Position bei Einschalten...
Eigentlich ist es mal wieder eine Frage von 'Ich erfinde das Rad neu,
um mich selbst zu beweisen' vs. 'eine Hand wäscht die andere und
gemeinsam kommen wir schneller zum Ziel' - Erfahrungsgemäß wird es
wohl auf Ersteres hinauslaufen ;-)

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.