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


von Bernd Schuster (Gast)


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

von Bernd Schuster (Gast)


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.

von Michael R. (mexman) Benutzerseite


Lesenswert?

Ruecksetzen des Timers vergessen.

von Bernd Schuster (Gast)


Lesenswert?

Michael Roek-ramirez schrieb:
> Ruecksetzen des Timers vergessen.

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

von Bernd Schuster (Gast)


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.

1
while(1)
2
{
3
   dwError =0;
4
5
   if(!FT_W32_ClearCommError(ftHandle, &dwErrors, (FTCOMSTAT *)&newCS))
6
   {
7
       //error 
8
       return;
9
   }
10
11
   if(dwError & CW_BREAK)
12
   {
13
      ftHandle = FT_GetStatus(ftHandle, &RxBytes, &TxBytes, &EventDword)
14
      if(RxBytes > 0)
15
      {
16
         printf("bytes received: %d\n", RxBytes);
17
      }
18
   }
19
}

von Bernd Schuster (Gast)


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

von Bernd (Gast)


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...
1
// set RS485 for receive
2
FT_W32_EscapeCommFunction(ftHandle,SETRTS);
3
  
4
FTTIMEOUTS ftTS;
5
ftTS.ReadIntervalTimeout = 0;
6
ftTS.ReadTotalTimeoutMultiplier = 0;
7
ftTS.ReadTotalTimeoutConstant = 1000;
8
ftTS.WriteTotalTimeoutMultiplier = 0;
9
ftTS.WriteTotalTimeoutConstant = 200;  
10
FT_W32_SetCommTimeouts(ftHandle,&ftTS);
11
12
DWORD dwMask = EV_ERR;
13
FT_W32_SetCommMask(ftHandle,dwMask);
14
DWORD dwEvents;
15
16
while (!Terminated) 
17
{
18
  FT_W32_WaitCommEvent(ftHandle, &dwEvents, NULL);      FT_W32_ClearCommError(ftHandle, &dwErrors, (FTCOMSTAT *)&newCS);
19
20
  if (dwErrors != dwOldErrors) 
21
  {
22
    bChanged = true;
23
    dwOldErrors = dwErrors;
24
  }
25
         
26
         if (bChanged) 
27
  {
28
    if ((dwErrors & CE_BREAK) || (dwErrors & CE_FRAME)) 
29
    {
30
      FT_W32_ReadFile(ftHandle, &temp_StartCode, 1, &bytesWritten, NULL);
31
      FT_W32_ReadFile(ftHandle, temp_DMXData, 512, &bytesWritten, NULL);
32
          
33
      TRACE("dmx data received: %d, %d\n", temp_DMXData[0], temp_DMXData[1]); 
34
35
    }
36
  }
37
  
38
          FT_W32_PurgeComm(ftHandle,FT_PURGE_TX | FT_PURGE_RX);
39
  memset(&temp_DMXData[0], 0x00, 512); 
40
}

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

von Bernd Schuster (Gast)


Lesenswert?

hat keiner eine Ahnung? Vielleicht übersehe ich ja irgendwas wichtiges?

Gruß
Bernd

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
Noch kein Account? Hier anmelden.