Hallo ihr Spezialisten!
Ich versuche grade mit meinem LightCo zu kommunizieren, scheitere aber regelmäßig :?
Der Reihe nach:
Projekt: DMX zu Lighttalk Wandler
Ich will mein DigitalLightCurtains über DMX steuern können. Derzeit geht es aber erstmal nur um das korrekte Auslesen der DMX-Daten. Der Rest ist das fast trivial, da ich schon eine komplette Software fertig habe, die Lighttalk spricht und versteht :wink:
Zielhardware:
DilNet/9200 (StarterKit 23). Drin steckt ein AT91RM9200. Ist ntürlich völlig oversized, aber für die späteren Funktionen (zB. Umschalten 8Bit/16 Bit oder Einschalten Speed-Kanal per Webinterface) schon sinnvoll.
Als RS485 zu RS232 Wandler wollte ich die gleiche Eingangsbeschaltung nehmen, die Hendrik beim Demux verwendet. Sollte doch gehen, oder? Meine Elektronikkenntnisse sind nicht sonderlich fundiert... :roll:
Momentan werkelt ein fertiger Adapter aus der Bucht dran.
Auf der Kiste läuft übrigens uLinux mit 2.4er Kernel, die Konfiguration der Baudrate geschieht händisch.
Zum Problem:
Die Daten werden fehlerfrei ausgelesen (damit meine ich die Werte der einzelnen DMX-Kanäle), aber ich scheitere an der Erkennung des Startbytes, respektive der des Reset/Break. Folgender Code platziert "Start" irgendwo im Datenstrom, aber sicherlich nicht vor dem ersten Kanal.
bytesRead = read(*fd, &readByte, 1); //hole 1 Byte
if(bytesRead==0){ //Lesefehler
firstTimeout = GetCurrentUs(); //Zeit sichern
do{
bytesRead = read(*fd, &readByte, 1);
}while(bytesRead==0); //Lesen bis erstes Zeichen korrekt empfangen
}
if(firstTimeout < (GetCurrentUs() - 88) && (u8)readByte==0){ //Es sind min. 88uS vergangen, Startbyte ist 0
printf("\nStart ");
do{
bytesRead = read(*fd, &readByte, 1);
printf("%d ",(u8)readByte);
}while(bytesRead==1); //Lesen bis Reset
}
Alles anzeigen
Edit: diese Sequenz läuft natürlich in einer Endlosschleife, hab ich nur nicht kopiert.
Ich hoffe mein versteht meinen Spaghetti-Code ein bisschen, sonst erläutere ich gerne meine Gedanken dazu. Ich will auch keinesfalls eine fertige Lösung haben, sondern eher
eine Anregung in welcher Richtung der Fehler zu suchen ist - ich will ja dabei auch ein bisschen was lernen :wink:
Besten Dank vorab,
Simon