Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Jörg, > > ähnlich bin ich schon vorgegangen. Ich lese alle Eingangssignale komplett in ein Array. Danach steht > dieses Array zur Auswertung bereit, und es wird parallel ein zweites Array beschrieben. Am Ende > wird das zweite Array freigegeben und mit dem erneuten Beschreiben des ersten Arrays erst > begonnen, wenn dieses vollständig ausgewertet wurde. > Das funktioniert auch soweit problemlos. Allerdings, wenn mehr als zwei Threads noch zusätzlich > auf den selben Bus auch schreiben, liest der Eingangsthread ab und zu nicht vorhandene Signale. > > Jetzt könnte man sich überlegen, nur noch ein Thread fürs Bushandling zu schreiben. Das hatte ich > mir auch schon überlegt, führt aber dazu, daß man auch hier einen riesigen Overhead zur > Synchronisation und Priorisierung zu diesem Thread programmieren muß, was eigendlich mehrere > Threads mit Capture implizit "mitmachen". Das will ich nur, wenn wirklich nix anderes mehr geht. > > Ich habe mir jetzt erstmal folgendermaßen geholfen: Nach dem Finden eines Eingangssignals, > ensprechendes Modul erneut auslesen und Ergebnisse vergleichen. Eingangssignal ist nur gültig, > wenn beide Leseergebnisse übereinstimmen. > > eingang=dwmodule.getDigi(modul); // Modul abfragen > if eingang > if eingang !=dwmodule.getDigi(modul) // Sicherheitsabfrage nur wenn > eingang=0; // positives Eingangssignal > > Damit war das Symptom weg. Also liegt es definitiv am I2C Handling. Konsequenter Weise müsste ich > das jetzt auch mit dem "Busschreiben" machen. Solange an ein Modul schreiben, bis das am Modul > gelesene dem Geschriebenen entspricht. > > Ich habe übrigens noch einen unerklärichen Effekt. > > Sensor[pos] = (modul*15)+1-1+bit; > > In obiger Zeile könnte man meinen, das +1 und -1 ist überflüssig. Ist es auch, solange die Variable > "modul" nicht "0" wird. Dann wird das Ergebnis nämlich auch 0 und nicht "bit" wie es mathematisch > korrekt wäre und es auch erwartet wird. Füge ich +1und -1 ein, funktionierts. > > Wieso??? > > Viele Grüße > > Detlef