PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serielle Übertragung mehrerer Variablen



giraffe
06.07.2008, 18:07
Hai,

mein Problem ist folgendes:
ich möchte zwei µCs (Atmel Mega, mit Bascom-Software) miteinander verbinden. Das ganze über eine serielle Schnittstelle, also RS-232.
Der eine soll jetzt möglichst schnell hintereinander mehrere Variablen senden, mit denen der Empfänger dann was machen soll. Nun meine eigentliche Frage: Wie erkennt der Empänger wo die eine Variable aufhört und die nächste anfängt??
Ist wahrscheinlich eine ziemlich dämliche Frage aber ich komm einfach zu keiner Lösung...


Vielen Dank schonmal...

Grüße die Giraffe

Jaecko
06.07.2008, 18:34
Wenns ne Bytevariable ist, dann ergibt sich das bei RS232 von selbst.
Wenn die Variable(n) grösser sind, dann wird zwangsweise ein Protokoll fällig.

Am einfachsten: ein Startzeichen, Trennzeichen und Endzeichen für nen Satz. Als Zeichen idealerweise Werte verwenden, die die Variable selbst nicht oder nur selten erreicht.

z.B wenn die Werte nur von 0 bis 100 gehen, dann z.B. 200 als Start, 201 als Datentrenner und 202 als Endzeichen.

Beim I2C könntest dir das sparen, da dort pro "Datensatz" die Daten in nem Array gespeichert werden können; werden die Variablen also immer in der gleichen Reihenfolge gesendet, dann kannst du mit nem Index immer auf die jeweilige Variable drauf.

PicNick
06.07.2008, 18:36
WIllst du deine Variablen als ASCII übermitteln oder binär ?

However, um was damit anzufangen, müssen der Sender und der Empfänger wohl sowieso einige Vereinbarungen treffen, also z.B. die Variablenlänge und den Datentyp.

z.B CSV-Format (Excel) : da werden ASCII-Datensätze ausgetauscht, wobei die einzelnen Variablen durch vereinbarte Trennzeichen getrennt sind ( ein semikolon ; ist beliebt)
Aber ob eine Variable ein Text, eine Zahl oder sonstwas ist, muss vereinbart werden.

repi64
06.07.2008, 18:37
Hängt von deinem "Protokoll" ab.
Musst halt am Empfänger nachvollziehen können welche Var grad rein kommt.
Es gibt viele Möglichkeiten.
1. Der Empfänger fragt eine bestimmte Var an.
2. Du sendest den Var-Namen mit "A=1234" ; "B=678" und der Empfänger zerlegt den String und weiss, das hinter dem "=" der Var-Wert kommt.
3. Du sendest immer alle Variablenwerte in einer festen Reihenfolge, welche durch ein bestimmtes Zeichen getrennt sind.
Auch wenn sich einige Werte gar nicht geändert haben.
Z.B.: "1234,678,4567,0000"
Der Empfänger weiss dann, dass zunächst A, nach dem Komma B kommt etc.
..........

giraffe
06.07.2008, 20:24
Hai

schonmal vielen Dank für die vielen schnellen Antworten :)

also I²C scheidet aus > weil Übertragungsstrecke.

ich würde die Daten gerne binär übertragen. Ich denke das schaffe ich indem ich "Printbin" verwende oder?
übertragen werden NUR Bytevariablen. Gesendet wird über RS232 allerdings hängt direkt dahinter ein RS485 Wandler aber das sollte ja letztlich egal sein für die Übertragung...

um ehrlich zu sein weiss ich nicht wie ich die Abfrage realisieren soll... Würde mir jemand ein kleines Beispiel aufschreiben? oben steht noch dass es sich bei Bytes von selber ergibt... heisst das dass ich einfach schreibe:

Do
A = Inkey()
B = Inkey()
C = Inkey()
Loop
End

das erscheint mit etwas zu leicht / schön um wahr zu sein :P