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 Klaus-Dieter, > > Zuerst: Benutze bitte die Taste "Enter/Return", bevor Du am > Zeilenende ankommst. Bei Antworten kann man sonst schlecht > den Originaltext von den Antworten unterscheiden. > Außerdem würde es den nicht-IE-Nutzern, wie mir, sehr erleichtern > zu Antworten, da ich dann nicht immer so weit nach rechts scrollen müsste. > (Vorschau benutzen) > > Nun zum Problem: > > > > CC2 kommuniziert mit einem BS2(BasicStamp) über swcom. > > Beim Senden eines Wertes nutze ich die Funktion: swcom.put(i) // i = Wert<=255 > > Auf der anderen Seite kommt dieser Wert auch an und zwar immer, wenn die Übertragung nur langsam genug ist. Lasse ich die Übertragung des Wertes über eine Schleife laufen, dann schleichen sich Fehler ein. Ich dachte mir vor einem erneuten Senden, probiere ich es mal mit der Funktion swcom.ready(); damit CC2 nicht zu früh loslegt. Leider - das habe ich auch irgendwo im Forum gelesen - macht dieses "ready()" nicht das Gewünschte. > > Einzige Möglichkeit für mich: ich habe ein "sleep" eingebaut. > > > > Kann es sein, daß der Empfangspuffer der Basic-Stamp überläuft ? > Ich arbeite viel mit swcom und konnte noch keine solchen Fehler feststellen. > > > Genau die gleichen Erfahrungen habe ich mit dem umgekehrten Weg. Auch hier muss ich es langsam angehen lassen. Die Anweisung "wait swcom.rxd()", die ich dort verwende, bringt den BS2 dazu nichts zu senden, wenn ich es mit Handshake versuche. Erst wenn ich ihm sage, sende, egal was CC2 dazu sagt, laufe ich durch die Schleife nach dem "wait swcom.rxd()". Aber auch hier liefert swcom.get(), nicht sofort die Werte, die BS2 abgesandt hat, ich muss solange in einer Schleife bleiben, bis ein Wert größer Null angekommen ist. > > > > Die Funktion rxd() prüft nur ob sich Daten im Empfangspuffer befinden. > Sie "veranlasst" nicht, daß ein anderes "Gerät" senden soll ! > Auch hier kann es sein, daß einfach der Empfangspuffer überläuft. > > > Das Ganze kann natürlich daran liegen, das ich die Jumper auf dem ApplicationBoard dort gelassen habe, wo sie von Hause aus sind. Ich habe das so verstanden, dass eine Beseitigung dieser Jumper (crts etc) dazu führt, dass ich nicht mehr gleichzeitig mit hwcom und swcom arbeiten kann. > > > > Das hat damit nichts zu tun. > Die Jumper sollten für hwcom gesetzt sein, damit das HW-Handshake für HWCOM funzt. > Wird der "Handshaketeil" des internen Pegelwandlers für SWCOM benutzt, muß µCCTS auf GND > gesetzt werde, da sonst hwcom nicht mehr korrekt funktionier. > (Durch den offenen Pin µCCTS nimmt dieser zufällige Pegel an und signalisier so u.U., > daß das angeschlossene Gerät nicht bereit ist.) > HWCOM und SWCOM können immer gemeinsam betrieben werden. > > An SWCOM (P1H.1 & .2) muß ein Pegelwandler IC angeschlossen werden, > wenn das angeschlossene Gerät mit RS232-Pegel arbeitet. > Wenn das angeschlossene Gerät mit TTL-Pegel arbeitet, wird kein Pegelwandler > benötigt. Jedoch sollten je 1k zum Schutz in die Leitung geschalten werden. > > > So habe ich zwar jetzt eine Lösung für mein Problem, bin aber sicher, dass das viel eleganter geht. Es würde mir sicher helfen, wenn ich wüßte, was die Funktionen: > > > > ready(); > > put(); > > rxd(); > > > > so eigentlich mit den swcom.ports anstellen. Vielleicht kann ich dann BS2 bitten, mir beim Datenfluss zu helfen. > > > > ready() prüft, ob gerade etwas an swcom gesendet wird, oder bereit für > eine Übertragung ist. Diese Funktion wird normal nicht benötigt, > da eine abfrage in den Sende-Funktionen bereits stattfindet. > (Ausnahme: Senden mehrerer String hinterenander mit der selben > Stringvariable.) > put() sendet ein einzelnes Zeichen (ASCII 0 bis 255) > rxd() prüft, ob sich Daten im Empfangspuffer sind. > get() liest ein einzelnes Zeichen aus dem Empfangspuffer > > Generell sollte bei der Kommunikation über SWCOM ein SW-Handshake > benutzt werden, also die Daten angefordert werden. > So sollte z.B. die CC2 ein definiertes Kommando-Byte senden, und dann > erst die BS2 senden. > Ein HW-Handshake ist bei SWCOM auch möglich (siehe touchlcd.c2) > > MfG André H.