Hallo, ich möchte einem Arduino ATMega 2560 DMX auswerten und entsprechend LEDs schalten. Was soweit theoretisch auch funktioniert. Zur Auswertung verwende ich die conceptinetics Libary. Nur beginnt die angesteuerte LED immer wieder zu flackern. Deshalb habe ich mich entschlossen, das DMX Signal mit Optokopplern zu trennen. Habe das ganze nach dem angehängten Schaltplan aufgebaut, leider funktionierts nicht (LED leuchtet nicht). Woran liegts?
max2d schrieb: > Hallo, > ich mich entschlossen, das DMX Signal mit Optokopplern zu trennen. obs hilft? > Habe das ganze nach dem angehängten Schaltplan aufgebaut, leider > funktionierts nicht (LED leuchtet nicht). Woran liegts? Sind VDD/2.4 2.4V? Dann wird der Vorwiderstand der OK mit 470 Ohm zu groß sein! Sascha
@ max2d (Gast) >Nur beginnt die angesteuerte LED immer wieder zu flackern. Deshalb habe >ich mich entschlossen, das DMX Signal mit Optokopplern zu trennen. Wenn die Tür quietsch spannst du den Regenschirm auf? DMX braucht keine galvanische Trennung, der Fehler liegt woanders.
@ Dennis R. (dennis_ec) >Die Optokoppler invertieren dein Signal. Nö, die sind NICHTinvertierend angeschlossen, siehe Optokoppler.
Muss mein Beitrag Revidieren, Die Leds hängen ja an 5V nicht an GND, sollte passen. Hast du mal nachgemessen ob die Pegel passen wenn du über einen Weiteren Bustreiber einfach mal ein Signal vorgibst. Optimal wäre Funktionsgenerator + Oszi.
VDD 2.4 sind 5V. Zugegeben, der name ist unglücklich gewählt. Ich möchte das DMX Signal aber trotzdem galvanisch Trennen. Aber wodurch entsteht dann das Flackern? Habe leider keinen weiteren Bustreiber. Aber wie gesagt, es funktioniert ja eigendlich, abgesehen von der galvanischen trennung.
max2d schrieb: > Aber wodurch entsteht dann das Flackern? Da hätte ich doch glatt mal auf einen Programmfehler getippt.
max2d schrieb: > Zur Auswertung verwende ich die conceptinetics Libary. Ach das ist Arduino Zeugs. Und ich hab mich schon gewundert. DMX ist doch auch nichts anderes als eine UART - wozu braucht man da eine Lib dafür? Jetzt allerdings bin ich mir recht sicher, dass es ein Programmfehler ist.
ok, hier mal das Programm:
1 | /* |
2 | DMX_Slave.ino - Example code for using the Conceptinetics DMX library |
3 | Copyright (c) 2013 W.A. van der Meeren <danny@illogic.nl>. All right reserved. |
4 | |
5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Lesser General Public |
7 | License as published by the Free Software Foundation; either |
8 | version 3 of the License, or (at your option) any later version. |
9 | |
10 | This library is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | Lesser General Public License for more details. |
14 | |
15 | You should have received a copy of the GNU Lesser General Public |
16 | License along with this library; if not, write to the Free Software |
17 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
18 | */ |
19 | |
20 | |
21 | #include <Conceptinetics.h> |
22 | |
23 | // |
24 | // CTC-DRA-13-1 ISOLATED DMX-RDM SHIELD JUMPER INSTRUCTIONS |
25 | // |
26 | // If you are using the above mentioned shield you should |
27 | // place the RXEN jumper towards G (Ground), This will turn |
28 | // the shield into read mode without using up an IO pin |
29 | // |
30 | // The !EN Jumper should be either placed in the G (GROUND) |
31 | // position to enable the shield circuitry |
32 | // OR |
33 | // if one of the pins is selected the selected pin should be |
34 | // set to OUTPUT mode and set to LOGIC LOW in order for the |
35 | // shield to work |
36 | // |
37 | |
38 | // |
39 | // The slave device will use a block of 10 channels counting from |
40 | // its start address. |
41 | // |
42 | // If the start address is for example 56, then the channels kept |
43 | // by the dmx_slave object is channel 56-66 |
44 | // |
45 | #define DMX_SLAVE_CHANNELS 10 |
46 | |
47 | // |
48 | // Pin number to change read or write mode on the shield |
49 | // Uncomment the following line if you choose to control |
50 | // read and write via a pin |
51 | // |
52 | // On the CTC-DRA-13-1 shield this will always be pin 2, |
53 | // if you are using other shields you should look it up |
54 | // yourself |
55 | // |
56 | ///// #define RXEN_PIN 2 |
57 | |
58 | |
59 | // Configure a DMX slave controller |
60 | DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS ); |
61 | |
62 | // If you are using an IO pin to control the shields RXEN |
63 | // the use the following line instead |
64 | ///// DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS , RXEN_PIN ); |
65 | |
66 | const int ledPin = 13; |
67 | |
68 | // the setup routine runs once when you press reset: |
69 | void setup() { |
70 | |
71 | // Enable DMX slave interface and start recording |
72 | // DMX data |
73 | dmx_slave.enable (); |
74 | |
75 | // Set start address to 1, this is also the default setting |
76 | // You can change this address at any time during the program |
77 | dmx_slave.setStartAddress (1); |
78 | |
79 | // Set led pin as output pin |
80 | pinMode ( ledPin, OUTPUT ); |
81 | } |
82 | |
83 | // the loop routine runs over and over again forever: |
84 | void loop() |
85 | { |
86 | // |
87 | // EXAMPLE DESCRIPTION |
88 | // |
89 | // If the first channel comes above 50% the led will switch on |
90 | // and below 50% the led will be turned off |
91 | |
92 | // NOTE: |
93 | // getChannelValue is relative to the configured startaddress |
94 | if ( dmx_slave.getChannelValue (1) > 127 ) |
95 | digitalWrite ( ledPin, HIGH ); |
96 | else |
97 | digitalWrite ( ledPin, LOW ); |
98 | |
99 | |
100 | } |
Hat jemand ne Idee was genau im Programm falsch ist? Bzw. kann mir jemand bei der erstellung eines richtigen Programms auf Arduino basis helfen? Das muss dieses Wochenende noch einwandfrei laufen. Muss das auf ner Veranstaltung einsetzen.
Ich muss mich korrigieren. Habe das ganze nochmals neu auf meinem Steckbrett aufgebaut. Bisher flimmert nichts :-) Bleibt nurnoch die Frage, warum es mit der Trennung über die Optokoppler nicht geht?
Korrigiere! Pin7 der Optokoppler MUSS auf +5V gelegt werden, das ist der ENABLE der Ausgänge!
Hab Pin7 der Optokoppler auf +5V gelegt, leider funktionierts immernoch nicht :-( Hab auch nochmal alles durchgeschaut, sollte passen
@ max2d (Gast) >Hab auch nochmal alles durchgeschaut, sollte passen Du sollst SYSTEWMATISCH eine Fehlersuche betreiben! 1.) Versorgungsspannung an allen ICs prüfen. 2.) Wenn du ein Oszi hast, alle Signale der Reihe nach prüfen. Erst Optokopplereinigang, dann Ausgang, für ALLER drei Optokoppeler 3.) Wenn du kein Oszi hast, kann man das mit langsamen Signalen und einem Multimeter auch testen. Mit dem AVR ein 1 Hz Blinksignal auf PIN2 und TXD0 ausgeben und mit dem Multimeter prüfen, ob das durch beide Optokoppler durchgeht. In Empfangsrichtung muss du ein Blinksignal an Eingang A oder B von IC2 anschließen, Masse nicht vergessen! Den anderen Eingang kann man auf LOW oder HIGH legen.
also, ich habe das ganze nochmals neu aufgebaut. Jetzt zu meinen Messergebnissen: Ich habe die Optokoppler mal manuell beschalten und mit dem Oszi gemessen, was sich am Augang tut. an OK10: An R11 0V angelegt -> LSP24 0V An R11 5V angelegt -> LSP24 5V an den anderen Optokopplern das gleiche. Mit angeschlossenem DMX ist mir allerdings aufgefallen, dass die Ausgangsspannungen am MAX485 minimal einbrechen (geschätz 1V)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.