Forum: Mikrocontroller und Digitale Elektronik DMX in Java mit FT232RL auf OSX! Hilfe!


von Oliver R. (kyromoto)


Lesenswert?

Hallo Forum!

Ich versuche jetzt seit Tagen einen FT232RL unter Java anzusteuern. Das 
Hat mit Hilfe von RXTX eigentlich auch funktioniert, bis ich eine 
spezielle Baudrate einstellen wollte (250kBaud).
Diese ist notwendig, da ich ein DMX Protkoll in Java implementieren 
möchte. Allerdings scheini RXTX keine nicht-Standart Baudraten 
zuzulassen.
Jetzt wollte ich das ganze mit jd2xx probieren, aber da weiß ich nicht 
wie ich ein Break senden soll (22x 0 Bit) und auch nicht wie ich den 
MarkAfterBreak senden kann.
Ich habe jetzt schon super viel gegoogeled und Quergelesen, aber ich bin 
noch kein Stück weiter.

Kann mir da jemand helfen oder hat ne Idee.

Was ich wohl weiß: Es muss irgendwie gehen, da es ein JAVA Lichttool 
gibt: Q Light Control und das hat mit dem Adapter auch schon 
funktioniert.

LG Oli

von Oliver R. (kyromoto)


Lesenswert?

So, ich bin jetzt schon ein Stück weiter. Kann jetzt mit Hilfe von jd2xx 
Daten über meinen Ft232RL senden.

Den Break hab ich jetzt realisiert, in dem ich die Baudrate von 
250kbit/s halbbiert habe und dann mit 125kbit/s ein Byte (0x00) + 1 
Startbit + 2 stopbit sende und dann wieder auf die volle Baudrate wieder 
Hochschalte. Ich sehe jetzt auch an meiner Testlampe das sie auf 
igrendwas reagiert, allerdings schaltet sie nicht so wie ich die Kanäle 
beschreibe.

Ich hänge mal den Quellcode an. Vielleicht fällt ja jemandem ein Fehler 
auf.
1
import java.io.IOException;
2
3
import jd2xx.JD2XX;
4
import jd2xx.JD2XX.ProgramData;
5
import jd2xx.JD2XXInputStream;
6
import jd2xx.JD2XXOutputStream;
7
8
public class dmx {
9
  
10
  public static void main (String[] args) throws IOException, InterruptedException{
11
    
12
    //Array Klasse mit 512 Byte feldern welche beim initalsieren auf 0xff gesetzt werden
13
    DmxBuffer db = new DmxBuffer();
14
    
15
    db.setValue(0, (byte)0x00);
16
    
17
    JD2XX jd = new JD2XX();
18
    
19
    jd.open(0);
20
    
21
    for(int t = 0; t < 10; t++) {
22
      byte[] b = db.getBuffer();
23
      jd.setBaudRate(125000);
24
      jd.setDataCharacteristics(JD2XX.BITS_8, JD2XX.STOP_BITS_2, JD2XX.PARITY_NONE);
25
      jd.setFlowControl(JD2XX.FLOW_NONE, 0, 0);
26
      jd.setTimeouts(1000,  1000);
27
      
28
      jd.write((byte)0x00);
29
      
30
      jd.setBaudRate(250000);
31
      jd.setDataCharacteristics(JD2XX.BITS_8, JD2XX.STOP_BITS_2, JD2XX.PARITY_NONE);
32
      jd.setFlowControl(JD2XX.FLOW_NONE, 0, 0);
33
      jd.setTimeouts(1000,  1000);
34
      
35
      jd.write((byte)0x00);
36
      
37
      for(int i = 0; i < b.length; i++) {
38
        jd.write(b[i]);
39
      }
40
      
41
      Thread.sleep(1000);
42
    }
43
  }
44
}

von Oliver R. (kyromoto)


Lesenswert?

Kann mir wirklich keiner Helfen?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

DMX mit Java ist eben genauso abwegig wie verteiltes Echtzeitjava...

Wenns schon direkt ohne zwischengeschalteten Mikrocontroller sein soll, 
dann bitte in C und als Kernelmodul.

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.