DMX Daten versenden

OP #1756596
Lesenswert?

Hallo Leute

Ich habe lange gesucht & gegoogelt, bin aber auf kein eindeutiges 
Ergebnis gekommen.

Und zwar will ich DMX-Daten versenden.
Zunächst mal die Frage, geht das mit nem PIC?
Ich weiß dass DMX auf RS485 basiert, ich kenne aber nur AVRs die diesen 
Bus unterstützen.
Was mir noch gar nicht klar ist ist die Programmierung. Wie versendet 
man am einfachsten DMX-Daten?
Ich kenne das Protokoll von einem DMX-Bus und alles was dazugehört, 
jedoch habe ich keinen Plan wie man das umsetzen kann. Ich habe viel 
Erfahrung mit PICs und sonstiger Hardware, jedoch nicht so viel beim 
programmieren und mit AVRs.
Am einfachsten helft ihr mir mit Codebeispielen. Bitte nur in der 
Sprache C bzw. C++.
Gibt´s vielleicht ne Bibliothek oder sonstiges für DMX? Das wäre 
natürlich super.

Schonmal jetzt danke für eure Antworten.

MfG
Gast #1756640
Lesenswert?

Du brauchst einen RS-485-Wandler. Den schließt du dann an den Controller 
an und gibst die Daten über UART aus. Für Break und Mark after break 
muss man ein bisschen tricksen. Bei einem Hardware-UART muss man den 
entsprechenden Pin auf Ausgang stellen und lange genug auf Low und dann 
auf High stellen. Danach können die Bytes ausgegeben werden.
#1756722
Lesenswert?

@  Emanuel Jörgner (e-sound)

>Und zwar will ich DMX-Daten versenden.
>Zunächst mal die Frage, geht das mit nem PIC?

Mit DEM PIC? Ach ja, gibt ja nur einen, und der ist schlecht ;-)
Siehe Netiquette.


>Was mir noch gar nicht klar ist ist die Programmierung. Wie versendet
>man am einfachsten DMX-Daten?

Einfach raushauen, die Daten.

>Ich kenne das Protokoll von einem DMX-Bus und alles was dazugehört,
>jedoch habe ich keinen Plan wie man das umsetzen kann.

Hmm.

> Ich habe viel
>Erfahrung mit PICs und sonstiger Hardware, jedoch nicht so viel beim
>programmieren und mit AVRs.

Kleiner Widerspruch in sich. Hör auf solche Märchen zu erzählen.

>Am einfachsten helft ihr mir mit Codebeispielen. Bitte nur in der
>Sprache C bzw. C++.
>Gibt´s vielleicht ne Bibliothek oder sonstiges für DMX? Das wäre
>natürlich super.

Google ist dein Freund.

>Schonmal jetzt danke für eure Antworten.

Gern geschehen.

MFG
Falk
OP #1757025
Lesenswert?

Dussel schrieb:
> Du brauchst einen RS-485-Wandler. Den schließt du dann an den Controller
> an und gibst die Daten über UART aus.

das is ein RS485-Tranceiver, sowas wie der LTC485, richtig?
Ich dachte mit nem PIC kann man kein UART ausgeben? Wie soll das dann 
gehn? oder liege ich da falsch?

> Für Break und Mark after break muss man ein bisschen tricksen. Bei einem
> Hardware-UART muss man den entsprechenden Pin auf Ausgang stellen und
> lange genug auf Low und dann auf High stellen. Danach können die
> Bytesausgegeben werden.

Verstehe. Ich würde das mit Timer machen, gibt es eine bessere 
Möglichkeit? (nein, ich bin kein profi-Programmierer)

Wie soll ich dann die DMX-Daten am besten versenden? Kann man sie 
einfach per Array versenden (ich laß da mal was)?

Wie gesagt, am besten hilft man mir mit Code-Beispielen.

Danke für die Antwort

@ Falk: ein bisschen unhöflich, findest du nicht?
Gast #1757170
Lesenswert?

Emanuel Jörgner schrieb:
> Verstehe. Ich würde das mit Timer machen, gibt es eine bessere
> Möglichkeit? (nein, ich bin kein profi-Programmierer)

Doch!
Baudrate auf <= 100kbit stellen, mit dieser Baudrate eine Null senden. 
Dieses Nullbyte wird beim Empfänger als Reset interpretiert. Baudrate 
wieder auf 250kbit stellen, noch eine Null senden und anschließend 
1..512 Datenbytes. Fertig.
Achtung Falle: Vor Rückstellung der Baudrate sicherstellen, dass das 
Byte mit niedrigerer Baudrate komplett gesendet wurde.
Gast #1757190
Lesenswert?

>das is ein RS485-Tranceiver, sowas wie der LTC485, richtig?
Ja, das stimmt. Oder MAX485, das ist wohl eher ein Standardbauteil, 
glaube ich.

>Ich dachte mit nem PIC kann man kein UART ausgeben? Wie soll das dann
>gehn? oder liege ich da falsch?
Wenn der kein Hardware-UART hat, dann musst du das wohl mit der Software 
machen, über einen Pin mit der passenden Geschwindigkeit die Byte 
ausgeben, also immer je nach dem Bit, das du gerade senden willst, auf 
High oder Low schalten.

>Kann man sie einfach per Array versenden
Ja, das geht. Dann musst du den ersten Wert aus dem Array senden, 
warten, bis er vollständig gesendet wurde, dann den zweiten Wert und so 
weiter. Aber denk daran, dass das erste Byte 0 sein muss. Das zweite 
gesendete Byte ist also für den ersten Kanal.
OP #1757935
Lesenswert?

Hey, danke leute, jetzt ist mir schon einiges klarer geworden!

Auf der Seite war ich schonmal, jedoch schaute ich noch nicht unter 
/Ressources, da sind nämlich Codebeispiele und Beschreibungen für die 
Programmierung.
Obwohl diese für AVRs sind kann ich ich mir das mit dem Code trotzdem im 
großen und ganzen herleiten.

Ich probier jetzt einfach mal so lange herum, bis was geht.
Mit diesem Weg wird mir wohl am meisten klar werden.

THX, Emanuel

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren