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 ! > Fortschritt: Mit der alten Receive Funktion in SWCOM funktioniert > alles wie es soll. Der Fehler ist also dort zu suchen! Leider bin ich dazu nicht gut genug. > > > > > Ich beziehe mich auf meinen Post > > > > http://www.cc2net.de/Foren/CC2Net_Forum/lesen.php?eintrag=16231 > > > > Ich vermute stark, das ein Bezug zu folgendem Post besteht. Langsam vermute ich einen Fehler > > weiter unten im "System" - darum jetzt ein Post hier.: > > > > http://www.cc2net.de/Foren/CC2Net_Forum/lesen.php?eintrag=15567 > > > > Ausgangslage: Ich verwende SWCOM mit Pegelwandler. Die Routine funktioniert einwandfrei mit HWCOM, > > jedoch nicht mit SWCOM. > > > > Hier der aktuelle Code. Es ist das einzige Modul und thread im Projekt. > > > > <code> > > thread main > > { > > stports.init(); > > stports.alloff(); > > lcdext.init(); > > swcom.init(); > > swcom.setspeed(5); > > > > byte buffer[32]; //2ter serieller Buffer > > byte length; > > int Wert1; > > int Wert2; > > int Wert3; > > byte Flag1; > > byte Flag2; > > byte Flag3; > > > > mem.fill(buffer,32,0x00); //Löschen > > > > loop > > { > > wait swcom.ready(); > > wait swcom.rxd(); > > > > swcom.receive(buffer,9,500); > > > > Wert1=mem.getint(buffer,0); > > Wert2=mem.getint(buffer,2); > > Wert3=mem.getint(buffer,4); > > Flag1=buffer[6]; > > Flag2=buffer[7]; > > Flag3=buffer[8]; > > > > wait swcom.ready(); > > swcom.send(buffer,9); //Echo > > > > lcdext.clear();lcdext.home(); > > lcdext.zahl3p(Wert1);lcdext.zahl3p(Wert2);lcdext.zahl3p(Wert3); > > lcdext.line(2); lcdext.zahl3p(Flag1);lcdext.zahl3p(Flag2);lcdext.zahl3p(Flag3); > > > > } > > } > > </code> > > > > Wenn ich 9 Zeichen schicke, werden 18 geantwortet. Dabei gibt es immer 8 0x00 nach dem ersten Zeichen, > > dass sich einschiebt. z.B. "ABCDEFGI" wird zwar wiedergegeben, aber mit 8x 0x00 nach dem A > > > > Bei Zahlen, zb. 0x01 0xF4 0x00 0xF0 0x01 0x2C 0x01 0x01 0x01 dasselbe > > > > Jetzt kommt das Verrückte: Wenn ich am Anfang noch ein Zeichen mehr anhänge > > > > 0x01 0x01 0xF4 0x00 0xF0 0x01 0x2C 0x01 0x01 0x01 > > > > wird korrekt geparst! D.h. das erste Zeichen scheint für mem.getint verloren gegangen zu sein, ist jedoch > > da, wie man am Echo des Ports feststellen kann! Das selbe ist reproduzierbar mit Text. > > > > Irgendwie kommt es zu einem selektiven Shift nach links. Dies erfolgt ab dem ersten Loop. Lässt sich > > auch ganz einfach mit einem String testen. Z.b. indem man ihn im LCD anzeigen lässt: > > > > lcdext.home(); > > lcdext.printlength(buffer,9); > > > > Das erste Zeichen wird verschluckt und der ganze String nach links geschoben. Beim Echo treten > > 8 Zeichen nach dem ersten - das offenbar doch da war - auf, welche dort nicht hingehören. > > > > Ich habe zwei verschiedene CC2 benutzt mit zwei verschiedenen Pegelwandlern. Eine Brandneu. Beide > > Aktuell. > > > > Hat jemand eine Idee? Workaround? > >