DMX Daten versenden

OP #1756596
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
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
@  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
Gast #1756773
>hat mal jemand probiert DMX mit nem UART auszuwerten?

Wie denn sonst? (Ich meine vor allem sinnvoll!)

Baudrate siehe DMX Spec. = 250 kBaud = Bitzeit 4µs
OP #1757025
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
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
>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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.