DMX 0-255 invertieren?

Hallo,

ich habe ein Uno mit DMX Shield. Dieses sendet seine Signale an RX TX. Die Signale kommen bis zu den Pins 5, 6, 10, 11, 3, wenn ich nun einen Fader am DMX Pult nach oben bewege, wird die LED dunkler statt heller. wahrscheinlich gibt es da einen einfachen Trick die Signale Bzw. die Pins zu invertieren aber ich komme gerade nicht drauf.

kann mir da jemand helfen?

ausgangswert=map(eingangswert,0,255,255,0);

wert = 255-wert;

Ich hab nichtmal Ahnung was DMX ist :sweat_smile:

Aber im ersten Link von Google dazu werden die Pins am Stecker beschriftet. Einer davon ist „Signal“, ein anderer „invertiertes Signal“.

Edit:

Und somit folgendes Blödsinn: Wie wärs die Pins einfach zu tauschen?

Bitte nochmal nachlesen!
Die physikalische Übertragungsebene ist RS485!
Ihm hat aber ein logisches Problem, weil ihm seine LED aktiv Low funktionieren.
Da hilft es nix, die Pins zu tauschen.

Das Datenblatt sagt:
1 0 Clear OC0A on Compare Match, set OC0A at BOTTOM,
(non-inverting mode).
1 1 Set OC0A on Compare Match, clear OC0A at BOTTOM,
(inverting mode).

Es muss also weder die teure map() und auch nicht das subtrahieren genutzt werden.
Sondern: Der Timer kann das auch alleine!
(man muss es ihm nur sagen)

1 Like

Habe sogar noch ein Beispiel in meiner "Timer Experimente Wühlkiste" gefunden.
Es trifft die Aufgabe allerdings nicht exakt.

Hier wird der PWM Wert immer nur hoch gezählt, und dennoch dimmt die LED abwechselnd hoch und dann wieder runter.


byte pwmValue;
const byte pwmPin {9}; // OC1A am Nano

void setup() 
{
  analogWrite(pwmPin,1); // arduino initialisiert Timer und Pin
}

void loop() 
{
   // toggeln der PWM Invertierung
   if(0 == pwmValue) TCCR1A ^= _BV(COM1A0);
   
   OCR1A = pwmValue++; // setzen und erhoehen
 
  delay(20);
}

das hatte ich gestern ausprobiert funktioniert aber leider nicht.

#include <DMXSerial.h>

const int Ultraschall1 = 5; // PWM Pin für Relais 1
const int Ultraschall2 = 6; // PWM Pin für Relais 2
const int Nebel = 10; // PWM Pin für Nebelmaschine
const int Luefter = 11; // PWM Pin für Lüfter
const int LuefterExt = 3; // PWM Pin für Lüfter

void setup() {

DMXSerial.init(DMXReceiver);
pinMode(Ultraschall1, OUTPUT); // Pin von der ersten LED als Ausgang definieren
pinMode(Ultraschall2, OUTPUT); // Pin von der zweiten LED als Ausgang definieren
pinMode(Nebel, OUTPUT); // Pin von der dritten LED als Ausgang definieren
pinMode(Luefter, OUTPUT); // Pin von der vierten LED als Ausgang definieren
pinMode(LuefterExt, OUTPUT); // Pin von der zweiten LED als Ausgang definieren

}

void loop() {

analogWrite(5, DMXSerial.read(1));
analogWrite(6, DMXSerial.read(2));
analogWrite(10, DMXSerial.read(3));
analogWrite(11, DMXSerial.read(4));
analogWrite(3, DMXSerial.read(5));

}

Du solltest us auch die Funktion DMXSerial.read() zeigen. Denn wir müssen ja sehen können, wie der gelesene wert dort verarbeitet wird, um Dir genau sagen zu Können, wie Du ihn invertieren kannst.
Es sei denn, du möchtest es mal so versuchen:

void loop(){
  analogWrite(5, 255 - DMXSerial.read(1) );
  analogWrite(6, 255 - DMXSerial.read(2) );
  analogWrite(10, 255 - DMXSerial.read(3) );
  analogWrite(11, 255 - DMXSerial.read(4) );
  analogWrite(3, 255 - DMXSerial.read(5) );
}

Ich kann mir gerade nicht vorstellen, warum man z.B. Relais mit PWM bewegen sollte....

das ist mein nächstes Problem. ich will dass die Relais bei 50% des Faders an und aus gehen. wie löse ich sowas?

digitalWrite(pin,DMXSerial.read(1) > 127);

@Deltaflyer nice danke hat funktioniert. doch so einfach haha

@combie da hätte ich auch drauf kommen können :joy: danke dir.

gern geschehen.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.