mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik FTDI: DMX Rx Break detection


Autor: Bernd Schuster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

weiß jmd wie man beim FTDI einen Break vom DMX-Signal erkennen kann? Ich 
möchte gern DMX empfangen mit einem FTDI. Das Signal kommt auch an, aber 
der DMX-Wert0 entspricht nicht dem ersten Wert im Buffer vom FTDI.

Gibt es hier eine Möglichkeit ähnlich wie bei einer normalen UART dass 
man den Break erkennen kann?

Gruß
Bernd

Autor: Bernd Schuster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs mittlerweile gefunden, nur funktionieren tut es leider noch nicht, 
die Break Detection wird immer zweimal pro 514-Bytes aufgerufen; zu 
unterschiedlichen Werten....

Aber als Funktion muss FT_W32_ClearCommError verwendet werden und als 
Error muss danach CE_BREAK ausgewertet werden....

Vielleicht hat jmd noch einen Hint an was das liegen könnte.

Autor: Michael Roek (mexman) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ruecksetzen des Timers vergessen.

Autor: Bernd Schuster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Roek-ramirez schrieb:
> Ruecksetzen des Timers vergessen.

Welcher Timer muss zurückgesetzt werden? Bis jetzt arbeite ich ohne 
Timer...

Autor: Bernd Schuster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal mein Code um das DMX Signal auszulesen. Wie gesagt der CE_BREAK 
kommt zweimal innerhalb eines DMX Frames an - einmal zu Beginn (DMX 
Break) und einmal mitten drin in einem DMX Frame. Mit dem Oszilloskop 
kann ich aber keine Break (low-level) über mehr als 8Bits erkennen; 
sprich die Stoppbits sind immer vorhanden.

while(1)
{
   dwError =0;

   if(!FT_W32_ClearCommError(ftHandle, &dwErrors, (FTCOMSTAT *)&newCS))
   {
       //error 
       return;
   }

   if(dwError & CW_BREAK)
   {
      ftHandle = FT_GetStatus(ftHandle, &RxBytes, &TxBytes, &EventDword)
      if(RxBytes > 0)
      {
         printf("bytes received: %d\n", RxBytes);
      }
   }
}

Autor: Bernd Schuster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Roek-ramirez schrieb:
>
> Ruecksetzen des Timers vergessen.


Hab jetzt vor der while(1) Schleife den FT_SetLatencyTimer(ftHandle, 
50); platziert und es scheint, dass dieser Timer der Grund für das 
Fehlverhalten war. Jetzt treten die CE_BREAK Messages nämlich zu anderen 
Zeiten auf.

Wie setze ich allerings diesen Timer wieder zurück? Bzw. kannst du mir 
ein kurzes Beispiel geben, wie ich mit diesen Timern umgehen muss? Hab 
auch schon versucht den Timer genau auf die Refreshrate zu setzen, aber 
auch hier bekomme ich falsche Break conditions geliefert.

Gruß
Bernd

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab jetzt nochmal einen Versuch gestartet, indem ich das Enttec Projekt 
mir angeschaut habe: leider wird auch in deren Beispiel der DMX Break 
nicht richtig erkannt...

// set RS485 for receive
FT_W32_EscapeCommFunction(ftHandle,SETRTS);
  
FTTIMEOUTS ftTS;
ftTS.ReadIntervalTimeout = 0;
ftTS.ReadTotalTimeoutMultiplier = 0;
ftTS.ReadTotalTimeoutConstant = 1000;
ftTS.WriteTotalTimeoutMultiplier = 0;
ftTS.WriteTotalTimeoutConstant = 200;  
FT_W32_SetCommTimeouts(ftHandle,&ftTS);

DWORD dwMask = EV_ERR;
FT_W32_SetCommMask(ftHandle,dwMask);
DWORD dwEvents;

while (!Terminated) 
{
  FT_W32_WaitCommEvent(ftHandle, &dwEvents, NULL);      FT_W32_ClearCommError(ftHandle, &dwErrors, (FTCOMSTAT *)&newCS);

  if (dwErrors != dwOldErrors) 
  {
    bChanged = true;
    dwOldErrors = dwErrors;
  }
         
         if (bChanged) 
  {
    if ((dwErrors & CE_BREAK) || (dwErrors & CE_FRAME)) 
    {
      FT_W32_ReadFile(ftHandle, &temp_StartCode, 1, &bytesWritten, NULL);
      FT_W32_ReadFile(ftHandle, temp_DMXData, 512, &bytesWritten, NULL);
          
      TRACE("dmx data received: %d, %d\n", temp_DMXData[0], temp_DMXData[1]); 

    }
  }
  
          FT_W32_PurgeComm(ftHandle,FT_PURGE_TX | FT_PURGE_RX);
  memset(&temp_DMXData[0], 0x00, 512); 
}

Den SetLatenyTimer hab ich per Default auf 16ms stehen gelassen. Wurde 
im Enttec Projekt auch nicht angetastet.

Wenn jmd ne Ahnung hat oder mit einem anderen Derivate von FTDI DMX 
Receive schon realisiert hat, wäre ich um einen Hint etc. sehr froh. Ich 
selbst verwende momentan den FT4232H.

Gruß
Bernd

Autor: Bernd Schuster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat keiner eine Ahnung? Vielleicht übersehe ich ja irgendwas wichtiges?

Gruß
Bernd

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.