Hallo zusammen, ich bin rellativ neu hier im Forum und habe grade ein bißchen gestöbert. Leider hab ich nicht so wirklich das gefunden, was ich suche. Ich habe mir ein EasyPic4 von MicroE zugelegt und würde nun gerne mal einen DMX-Empfänger auf nem PIC programmieren. Aber ich stehe da leider noch ein bisserl wie der Ochs vorm Berge. Wie implementiere ich den DMX-Empfang am Besten auf dem PIC. Kann ich dafür nen Usart nutzen oder muß ich das von Hand mit Timern machen? Bin da für jeden Hinweis dankbar! Wenn jemand Beispielquelltexte für mich hat, wäre das echt super!!! Beste Grüße
Schade ... schade ... schaut ja nicht gut aus für meinen Thread. Vielleicht wirds ja über den Tag noch was ...
Hi, was ist denn ein "DMX-Empfänger" ???? Gruß Andreas
Gast
#746948
DMX ist doch im Prinzip nix anderes als RS485. Also ist UART wohl die beste Wahl :-)
@Uboot-Stocki Sorry ich habs vielleicht nicht richtig ausgedrückt. Ich möchte ganz gerne das DMX-Protokoll, mit Hilfe von einem PIC-Mikrocontroller dekodieren, um dann andere Sachen ansteuern zu können (Dimmer, Servos, etc) @Tracelrec Die Seite hab ich schon gesehen, leider gehts da mehr um AVRs als um PICs und mit denen kenn ich nu leider nicht so aus. Aber trotzdem erstmal DANKE
Naja - es stehen halt wichtige Details dort, gerade was die Beschreibung der UART-Nutzung angeht. Das ist sicher auch auf PICs übertragbar (oder dur lernst schnell mal AVR ;-) )
Na ich merke schon hier spalten sich die Geister in PIC und AVR :-) Werde mir das auf jeden fall mal durchlesen und komme dann gerne nochmal drauf zurück, wenn ich da fragen hab. Gibts denn sonst noch irgendwelche Seiten im Netz, die vielleicht direkt nen PIC zum Empfangen benutzen?!
@ Stefan Hänsch (dj-duck) >Gibts denn sonst noch irgendwelche Seiten im Netz, die vielleicht direkt >nen PIC zum Empfangen benutzen?! Ist doch vollkommen eagl. DMX ist simpel. http://www.soundlight.de/techtips/dmx512/dmx512.htm http://dworkin-dmx.de/ MfG Falk
hm ... die Links sind ja so ganz nett - also wie das Protokoll aufgebaut ist weiß ich genau. Mit fehlt nur noch die zündende Idee zur Implementierung. Brauche einfach mal n Beispielquelltext
@ Stefan Hänsch (dj-duck) >Mit fehlt nur noch die zündende Idee zur Implementierung. Brauche >einfach mal n Beispielquelltext Im Prinzip so. RS232 mit UART im Interrupt empfangen. Wenn Zeichen ==0 und Frame Error (Stop Bit =0) -> Break, Zähler rücksetzen Wenn keine Frame Error -> empfangenes Byte speicher in einem Array my_array[zähler]=UART_Data Zähler +1 Thats it. Mit den Daten im Array kanst du machen was du willst. MfG Falk
Na damit kann ich schon eher was anfangen! Das probier ich mal ... hast du so was schon mal ausprobiert - also eigene Projekte?
@ Stefan Hänsch (dj-duck) >hast du so was schon mal ausprobiert - also eigene Projekte? Bin ich gearde dabei. Ne LED Matrix 9x9 RGB LEDs, voll dimmbar. Allerdings nicht mit PIC sondern FPGA. Die Simulation läuft perfekt. In ein paar Tagen kommt mein Board und meine Bauteile. Dann wirds ernst ;-) MFG Falk
Gast
#747370
@Stefan: Wie wäre es hiermit: http://www.renebiemans.nl/page.php?al=dmx Gruß Sven
@ Sven (Gast) >http://www.renebiemans.nl/page.php?al=dmx Uhhhh, ich weiss nicht was gruseliger ist. Das Holländisch oder PIC Assembler ;-) SCNR Falk
Gast
#747463
@ Falk + Stefan: Einen habe ich noch: http://www.davidbuckley.name/ddim16/ Gruß Sven
Gast
#747464
ps.: das ist jetzt auch in C ;-)
Gast
#749763
Ich habe das tutorial uber DMX an http://www.renebiemans.nl/page.php?al=dmx gemacht. Wann er fragen het könten Sie vragen erstellen an info[at]renebiemans.nl Ich kann Englisch, Niederlandisch und ein klein bitchen Deutch. GrüBen aus den Niederlanden, Rene Biemans
Soweit ich weiss gibts auch ne AN von Microchip zu diesem Thema. MfG Karsten
Erstmal vielen Dank für die zahlreichen Antworten... nächstes Wochenende werde ich mich da mal durcharbeiten. @K.B. weißt du da was genaueres? Da hab ich nämlich bisher noch nichts passendes gefunden.
Gast
#750925
Na, das wichtigste hat Falk ja schon geschrieben. Wenn ein Framing Error detektiert wird, war das das Break. Typisch >= 88µs. Danach folgt das Mark after Break (>= 8 µs). Dann, sehr wichtig, das Startbyte; das muss den Wert 0 haben. Und dann kommen die Daten von mindestens einem Kanal bis max. 512 Kanäle. Üblicherweise musst du auf deinem Board aber noch ein Mäuseklavier, oder aber besser, 3 BCD-Schalter haben, die die Startadresse deines Gerätes setzen. Wichtig: 250000 Baud 8N2 ohne Parity Fast vergessen: immer das Data Overrun-Flag abfragen. Wenn das gesetzt ist hast du ein Datum verpasst. Dann kannst du Kaffe trinken gehen, bis der nächste FE-Fehler kommt und dann den Zähler neu aufsetzen. Ich denke mal die PICs werden eine ähnliche Funktionalität haben wie die AVRs. MW
So bitteschön: http://ww1.microchip.com/downloads/en/AppNotes/01076A.pdf Hab auch nur mit Google gesucht. MfG Karsten
Ist vielleicht auch interessant: http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=9474 Auch mal in die Bauanleitung schauen...
Hallo, anbei mal der Ausschnitt aus meinem DMX-8-Kanal-Lichteffektgerät in welchem das DMX Protokoll dekodiert wird (für PICs). Ist eigentlich verständlich, wenn man eine Weile drüber nachdenkt. Wenn Interesse besteht, kann ich das komplette Programm (mehrere 1000 Prog.Zeilen) und den Schaltplan hier posten. Ist allerdings ein recht Umfangreiches Projekt gewesen.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
Falls noch Fragen sind stehe ich gern zur Verfügung. Gruß Sven PS: Ach ja, den DMX-Programmteil fand ich irgendwo im iNet und hab es dann auf meine Zwecke angepasst bzw. erweitert.
Nabend zusammen! Vielen Dank erstmal allen, die hier gepostet haben. Hab viele interessante Ideen bekommen und werde nun versuchen da mal ein bisserl was umzusetzen. Hab mir jetzt auch ne Testumgebung gebaut, so dass ich direkt testen kann. Hab da noch mal ne Frage: Ich will das ganze mit Hilfe des USARTs empfangen. Welche Bautraute muss ich da einstellen. Ein Baut ist doch immer ein Symbol, oder? DMX hat 250K/Bit pro Sekunde - das ist mir klar. Aber wie rechne ich das nun in Baut um? Wäre nett, wenn ihr mir da nochmal auf die Sprünge helfen könntet. Danke schon mal im Voraus :-) Schönen Abend noch!
@ Stefan Hänsch (dj-duck) >Ich will das ganze mit Hilfe des USARTs empfangen. Wie sonst? > Welche Bautraute muss >ich da einstellen. Ein Baut ist doch immer ein Symbol, oder? Baud > DMX hat 250K/Bit pro Sekunde - das ist mir klar. = 250kBaud. MFg Falk
Super ... das ging ja mal sehr schnell!!! Hab da folgende Formel gefunden für nen PIC 16F877A: Baut-Rate = Fosc / ( 64 * ( x + 1 )) <- für den Low-Speed-Mode Baut-Rate = Fosc / ( 16 * ( x + 1 )) <- für den High-Speed-Mode Bei nem 8MHz Quarz muss ich also in den HIGH-Speed-Mode wechseln und dann das SPBRG = 1 setzen. Ich hoffe das ist korrekt, oder??!
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Die Formeln hast du ja schon gefunden. Nun musst du nur noch die richtigen Werte setzen. Mein PIC läuft mit 16MHz. Hab gerade mal nachgerechnet, deine errechneten Werte sind korrekt.
Also irgendwie bekomme ich nur Framing-Errors und das neunte Dantenbit ist auch durchgängig Null ... habt ihr da spontan ne Lösung oder ist Euch das vielleicht auch schon mal untergekommen? Ich glaube irgendwie, daß die Bautrate nicht stimmt, hab aber eigentlich alles richtig eingestellt ...
Hast du eventuell an dem RS485 Treiberchips die beiden Datenleitungen vertauscht? Das hatte ich am Anfang auch falsch herum und ständig Frameerrors erhalten. Ich hatte in meiner Schaltung den SN75176 eingesetzt. Die Pins A müssen mit den Pins A der anderen Chips und die Pins B mit den Pins B verbunden werden. Sonst fällt mir auch nix weiter ein. Sven
Gast
#793990
>und das neunte Dantenbit ist auch durchgängig Null ...
DMX lebt von 2 Stoppbits und nicht von 9 Datenbits.
MW
@ Sven Stefan (stepp64) >Hast du eventuell an dem RS485 Treiberchips die beiden Datenleitungen >vertauscht? Das hatte ich am Anfang auch falsch herum und ständig >Frameerrors erhalten. Ich hatte in meiner Schaltung den SN75176 DMX Plus = A DMX Minus = B Beitrag "DMX512 Empfänger mit Relaisansteuerung für 20 Kanäle" MfG Falk
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.