mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Nebelmaschine über Dmx mit arduino steuern


Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe gerade ein Projekt laufen in dem ich eine Nebelmaschine mit 
Hilfe eines Arduinos über Dmx steuern möchte.Ich habe schon den 
Programmcode von der Arduino Website eingefügt 
(https://playground.arduino.cc/DMX/Ardmx).Nun ist meine Frage wie ich 
festlegen kann das wenn bei einem Kanal der Wert über z.B. 125 ist eine 
Signal an einen Transistor ausgegeben wird.Am besteb wäre es wenn mir da 
jmd. ein Beispiel schicken könnte.

Danke für eure Bemühungen.

Sascha

Autor: Patrick J. (ho-bit-hun-ter)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hi

'Siehst' Du denn die verschiednen Werte der vorbeiflitzenden Kanäle?
Dann ist's doch eher trivial:
Passt die Kanalnummer?
Ja ... ist der diesem Kanal mitgegebene Wert >125?
Ja ... Feuer frei, sonst wieder aus machen.

Etwas mehr als 'Habe was zusammen kopiert und brahcne noch mehr von 
Euch' sollte Es schon sein ;)

Eben auch Informationen, was bei Dir schon funktioniert, wo es hängt und 
wie Du den Hängern bisher nachgegangen bist.

Auch ein Anfänger kann versuchen, den frisch zusammen kopierten Code zu 
analysieren.
Selbst, wenn dabei 'Mist' analysiert wird, zeigt Das dem geneigtem 
Forenvolk, daß Du Dich damit auseinander setzen WILLST und nicht nur 
'was zum Vorzeigen/Angeben vor den Anderen' brauchst.

MfG

Autor: Luca E. (derlucae98)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lege das zu übertragende Byte in einer Variable ab.

if (byKanal > 125){
digitalWrite(PIN, HIGH);
} else {
digitalWrite(PIN, LOW);
}

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich habe es schon versucht zu analysieren .Mir fehlt nur der Name von 
der Variable der für den kannal steht und der der die Werte mit sich 
bringt. Diese beiden Variablen  habe ich im Programm leider nicht 
ausfindig machen können.

Mfg Sascha

Autor: Martin K. (maart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich tippe mal auf DmxRxField

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke.Und der Wert wo ist der hinterlegt?

Autor: Luca E. (derlucae98)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Codebeispiel von oben ist nur zum empfangen von DMX-Befehlen 
gedacht. Um die Nebelmaschine steuern zu können, musst du aber 
DMX-Befehle senden.

Autor: Luca E. (derlucae98)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Oder ist deine Nebelmaschine nicht DMX fähig, sondern ein Selbstbau(?), 
der DMX fähig gemacht werden soll?

Autor: Martin K. (maart)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Luca E. schrieb:
> Dein Codebeispiel von oben ist nur zum empfangen von DMX-Befehlen
> gedacht. Um die Nebelmaschine steuern zu können, musst du aber
> DMX-Befehle senden.

Er will wohl eine einfache Maschine mit Handtaster auf DMX-Steuerung 
erweitern.

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau ich will meine Nebelmaschine auf Dmx umbauen .Und wo ist denn der 
Wert für den jeweiligen Kannal hinterlegt?

Autor: Luca E. (derlucae98)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha schrieb:
> Wert für den jeweiligen Kannal hinterlegt?

In dem Array DmxRxField[i], wenn ich mich nicht irre. 'i' gibt die 
Kanalnummer ab der Startadresse an. Wenn als Startadresse '3' 
eingestellt ist, steht in DmxRxField[0] der Wert des 3. Kanals, in 
DmxRxField[1] der Wert des 4. Kanals, usw.

: Bearbeitet durch User
Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke für die Hilfen.

Autor: Patrick J. (ho-bit-hun-ter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Sascha schrieb:
> Ja ich habe es schon versucht zu analysieren .Mir fehlt nur der Name von
> der Variable der für den kannal steht und der der die Werte mit sich
> bringt. Diese beiden Variablen  habe ich im Programm leider nicht
> ausfindig machen können.

Da in dem Code nicht sooo viele Variablen vorhanden sind, hätte man 
versuchen können, ob die per DMX verschickten Werte irgendwo im Programm 
auftauchen.

Da die Variablen halbwegs aussagekräftige Namen haben, könnte man auch 
so auf die Funktion der Variable schließen und mit Diesen die Prüfung 
anfangen, ob der gesendete Wert dort erscheint.
Wenn JA, Pin13 (meines Wissen wohl immer eine LED auf dem 'Shild') an, 
wenn NEIN, wieder aus.

MfG

Autor: Marco H. (damarco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
steht doch in der Beschreibung. Der Code liest die Daten erst ab der 
gesetzten Startadresse ein.

volatile uint8_t  DmxRxField[8]; //array of DMX vals (raw)
volatile uint16_t DmxAddress;    //start address

Hier hat das Fixture 8 channels das Array DmxRxField ist somit 8 byte 
groß

Die Adresse wird  im setup mit DmxAddress = 3; // The desired DMX Start 
Address gesetzt.

Die werte sind dann im mxRxField[0] für Channel 1 ab der Startadresse 
vorhanden.

Nun ist es sehr simpel das auszuwerten ;)
    void loop() {

      if(mxRxField[0]>127)digialWrite(pinx,high);
      else digialWrite(pinx,low);
    }

was leider fehlt ist einen Timer der abläuft wenn das Signal ausfällt 
und dann den Pin in einen default zustand bringt. Sonst bleibt dieser 
high da sich die Werte im mxRxField nicht mehr ändern kann aufgrund des 
fehlenden Signals.

Der Code ist zwar einfach aber recht störanfällig, da DMX Telegramme 
nicht geprüft werden ob sich wirklich gültig sind. Mit dem Finger auf 
den RX Anschluss fängt das ganze an zu flackern.

: Bearbeitet durch User
Autor: Sascha (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich bin es mal wieder.
Wollte jetzt gerade das Programm(nur ein Test Programm ob mein 
schnittstellen ic funktioniert) siehe anhang auf mein arduino uno 
überspielen.Jedoch kam bei mir folgender fehler heraus: 
'USART0_RX_vect' appears to be a misspelled signal handler, missing 
__vector prefix [-Wmisspelled-isr]

 ISR(USART0_RX_vect) {

     ^

dmx:21: error: 'UCSR1A' was not declared in this scope

   uint8_t  USARTstate= UCSR1A;    //get state before data!

                        ^

dmx:22: error: 'UDR1' was not declared in this scope

   uint8_t  DmxByte   = UDR1;      //get data

                        ^

dmx:25: error: 'FE1' was not declared in this scope

   if (USARTstate &(1<<FE1))   //check for break

                       ^

exit status 1
'UCSR1A' was not declared in this scope
Nun weiß ich leider nach etlichen Stunden herumprobieren nicht mehr 
weiter.Wäre nett wenn mir jmd eine Antwort schreiben würde.
LG Sascha

Autor: moep (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du den Link den du oben gepostet hast eigenltich jemals selbst 
angeschaut?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.