INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
DMX Empfänger
25.08.2015, 22:39
Beitrag #1
DMX Empfänger
Guten Abend,

nun man findet sehr sehr wenig zum Thema DMX Empfänger.

Ich habe das Problem ,dass meiner nicht funktioniert.

Mal wertet er etwas aus, mal garnichts. Mal erkennt er das Signal falsch teilweise richtig.

Mein Code ist aus einem Tutorial aus dem Arduino Playground glaube ich:
Code:
#define RX_STATUS_PIN 2

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

enum {IDLE, BREAK, STARTB, STARTADR}; //DMX states

volatile uint8_t gDmxState;
byte i = 0;

void setup() {
  // put your setup code here, to run once:
pinMode(A5, OUTPUT);
Serial.begin(250000,SERIAL_8N2); //Enable serial reception with a 250k rate
gDmxState= IDLE; // initial state
DmxAddress = 1; // The desired DMX Start Adress
}

void loop() {
  for(i=0;i<8;i++)
  {
  if(DmxRxField[i])    {digitalWrite(A5,HIGH);}
  else digitalWrite(A5,LOW);
  }
}

ISR(USART_RX_vect) {
        static  uint16_t DmxCount;
        uint8_t  USARTstate= UCSR0A;    //get state before data!
        uint8_t  DmxByte   = UDR0;          //get data
        uint8_t  DmxState  = gDmxState; //just load once from SRAM to increase speed

        if (USARTstate &(1<<FE0))               //check for break
        {
                DmxCount =  DmxAddress;         //reset channel counter (count channels before start address)
                gDmxState= BREAK;
        }

        else if (DmxState == BREAK)
        {
                if (DmxByte == 0) gDmxState= STARTB;  //normal start code detected
                else                      gDmxState= IDLE;
        }

        else if (DmxState == STARTB)
        {
                if (--DmxCount == 0)    //start address reached?
                {
                        DmxCount= 1;            //set up counter for required channels
                        DmxRxField[0]= DmxByte; //get 1st DMX channel of device
                        gDmxState= STARTADR;
                }
        }

        else if (DmxState == STARTADR)
        {
                DmxRxField[DmxCount++]= DmxByte;        //get channel
                if (DmxCount >= sizeof(DmxRxField)) //all ch received?
                {
                        gDmxState= IDLE;        //wait for next break
                }
        }
        digitalWrite(RX_STATUS_PIN, LOW);                                                
}

Das Oszilloskop Zeigt mir die Spannung an A5 welche dem Bussignal entsprechen müsste. An der UART liegt ein DMX Signal als TTL an welches auch von anderen Geräten erkannt wird.

Gibt es online Dokumentationen zu alternativen Empfängern oder hat jemand was ähnliches basteln müssen? Ich debugge mit dem Oszi seit 1,5h und bekomme ständig andere Ergebnisse.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 22:09 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2015 22:10 von BennIY.)
Beitrag #2
RE: DMX Empfänger
Nun habe ich ein Signal empfangen und in ein TTL Signal umgewandelt:

for(i = 1; i<9;i++)
{
if(DMXSerial.read(i) > 127)
{
bitSet(Send[0], bitCounter);
digitalWrite(A5,HIGH);
}
else
{
bitClear(Send[0], bitCounter);
digitalWrite(A5,LOW);
}
bitCounter++;
}

Er erkennt auch das richtige Signal nur wird es nicht geupdatet.
Manchmal wird auch garnichts erkannt, suche wieder 2h mit dem Scope nach dem Fehler manchmal funktioniert es dann änder ich etwas dann geht es nicht mehr. Dann mach ich die Änderung rückgängig und es geht immernoch nicht, jedes mal ein anderes Ergebnis im Scope.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 22:18
Beitrag #3
RE: DMX Empfänger
Hast du einen Standard DMX Sender?
Abschluss-R an der DMX Leitung?
Polarität des DMX Signals richtig?

Nicht jeder Neuling in einem Forum hat keine Ahnung über die Materie!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 22:32 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2015 22:37 von BennIY.)
Beitrag #4
RE: DMX Empfänger
Ich kann alles 3 Bejahen.

Mein Ziel ist es 25 Kanäle an Schieberegister zu senden dazu folgendes Programm:
Code:
#include <DMXSerial.h>
#include <SPI.h>

byte i;
byte Send[3];
byte bitCounter = 0;

void setup () {
  SPI.begin();
  DMXSerial.init(DMXReceiver);
  pinMode(A5, OUTPUT);//Serial Out als test
  pinMode(8, OUTPUT); //DMX Kanal 1
  pinMode(12, OUTPUT);//STCP der Schieberegister
}


void loop() {
  if(DMXSerial.read(1) > 127)  
  {
    digitalWrite(8,HIGH);
    digitalWrite(A5,HIGH);
  }
    else
  {
    digitalWrite(8,LOW);
    digitalWrite(A5,LOW);
  }
  bitCounter=0;
  for(i = 2; i<10;i++)//Kanal 2-9
  {
    if(DMXSerial.read(i) > 127)  
    {
    bitSet(Send[0], bitCounter);
    digitalWrite(A5,HIGH);
    }
    else
    {
    bitClear(Send[0], bitCounter);
    digitalWrite(A5,LOW);
    }
    bitCounter++;
  }
  bitCounter=0;
  for(i = 10; i<18;i++)//Kanal 10-17
  {
    if(DMXSerial.read(i) > 127)  
    {
    bitSet(Send[1], bitCounter);
    digitalWrite(A5,HIGH);
    }
    else
    {
    bitClear(Send[1], bitCounter);
    digitalWrite(A5,LOW);
    }
    bitCounter++;
  }
  bitCounter=0;
  for(i = 18; i<26;i++)//Kanal 18-25
  {
    if(DMXSerial.read(i) > 127)  
    {
    bitSet(Send[2], bitCounter);
    digitalWrite(A5,HIGH);
    }
    else
    {
    bitClear(Send[2], bitCounter);
    digitalWrite(A5,LOW);
    }
    bitCounter++;
  }

  SPI.transfer(Send[2]);
  SPI.transfer(Send[1]);
  SPI.transfer(Send[0]);
  digitalWrite(12,HIGH);
  delay(1);
  digitalWrite(12,LOW);
  delay(1);  
}
Um klartext zu reden.

Der Pin 8 Updatet sofort sein Status wenn ich am Sender etwas Änder.
Die Schieberegister machen grad was sie wollen. Entweder garnicht oder richtig oder ich veränder am Pult etwas aber die Register bleiben beim vorherigem (Auch nach neu anlegen der spannung) etc...
Manchmal ist es auch so, dass ich den STCP Takt messe, sehe aus dem SPI gehts richtige raus doch der Ausgang der Register bleibt auf 0V.

Und das schlimme daran ist, ich weis das es funktionieren muss weil manchmal sind meine Ausgänge ja richtig.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 22:59
Beitrag #5
RE: DMX Empfänger
..ich würde erst mal ohne SPI testen.
Empfang von z.B. 8 Kanälen auf einfache Pins des Controllers.

Nicht das DMX und SPI sich beißtWink

Nicht jeder Neuling in einem Forum hat keine Ahnung über die Materie!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 23:06 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2015 23:08 von BennIY.)
Beitrag #6
RE: DMX Empfänger
Das funktioniert genau so wie das verteilen auf die schieberegister. ales in kleinerem umfang schon getestet
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 23:27
Beitrag #7
RE: DMX Empfänger
http://www.arduinoforum.de/arduino-Threa...e-schalten


Durchdenke und teste dies!

Nicht jeder Neuling in einem Forum hat keine Ahnung über die Materie!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.08.2015, 23:37
Beitrag #8
RE: DMX Empfänger
Ich versuche morgen den Empfang via conceptinetics und schreibe ganz genau wie ich dabei vorgehe denn wie gesagt wenn ich nur empfange oder nur die schieberegister teste geht alles sobals ich alles versuche fällt irgend etwas aus was vorher einwandfrei funktionierte.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  DCF77 Empfänger paq 19 910 23.07.2016 17:16
Letzter Beitrag: rkuehle
  Empfänger RF 433 peterfried 6 366 10.06.2016 23:01
Letzter Beitrag: hotsystems
  AKtuelle Uhrzeit bekommen, RTC oder DFC-Empfänger Cray-1 34 15.535 11.02.2016 23:49
Letzter Beitrag: hotsystems
  Hilfe bei RC-Empfänger Signale auswerten und verarbeiten Pat12-6 7 1.677 19.03.2015 20:17
Letzter Beitrag: Eichner
Wink Bitte helft mir: RC Empfänger auslesen und an Motortreiber weitergeben. christian@schiltkamp.info 7 3.916 15.03.2015 17:54
Letzter Beitrag: Pat12-6
  RC-Empfänger auslesen und Motoren steuern Pat12-6 0 972 14.03.2015 10:29
Letzter Beitrag: Pat12-6
  Auto Level Quadrocopter (Modellbau Empfänger) Neumi 12 1.697 20.01.2015 13:47
Letzter Beitrag: Eichner
  IR SENDER & EMPFÄNGER Marc2014 13 3.457 02.10.2014 11:36
Letzter Beitrag: Marc2014
  RC-Empfänger-Signal auswerten DerFranke 6 3.432 18.09.2014 21:06
Letzter Beitrag: scritch
  IR Sende / Empfänger Klasse - wo hier deponieren? Hobel 0 1.649 15.09.2013 13:00
Letzter Beitrag: Hobel

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste