Re: swcom.rxd(),swcom.put(),swcom.get,(),swcom.ready() Kategorie: Programmierung (von André H. - 27.01.2003 11:02) | |
Als Antwort auf swcom.rxd(),swcom.put(),swcom.get,(),swcom.ready() von Klaus-Dieter Reiners - 26.01.2003 22:31
| |
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. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | |
Antwort schreiben Antworten: |