-
Daten senden/empfangen
Hallo zusammen,
ich beschäftige mich erst seit kurzem mit µC und stehe momentan vor einem kleinen Problem.
Von einem Sensor werden Beschleunigungswerte ausgelesen und anschließend von einem Board auf ein anderes gesendet.
Hier der Code:
Code:
Do
X = Getadc(0)
Print " " ; X;
Waitms 10
Y = Getadc(1)
Print " " ; Y;
Waitms 10
Z = Getadc(2)
Print " " ; Z;
Waitms 10
Nun zu meiner Frage: Da ich mit den verschiedenen Beschleunigungswerten weiterarbeiten möchte, müssen diese getrennt voneinander abgelegt werden. Ist das möglich? Habe leider noch nichts gefunden, was mir weiterhilft. Vielleicht steh ich aber auch einfach nur auf dem Schlauch.
Für jede Hilfe wäre ich sehr dankbar.
Matthias
(Ich arbeite mit zwei RN-Mega128Funk-Boards mit EasyRadio ER400Trs-Modul)
-
Nachdem ich heute wieder etliche Stunden vor dem Rechner verbracht habe verzweifle ich langsam. Es muss doch eine Möglichkeit geben die Daten, die ich getrennt voneinander verschicke auch getrennt voneinander auszulesen, oder nicht?
Mit Z = Inkey() werden normalerweise die gesendeten Daten empfangen, dabei kann aber nicht zwischen den einzelnen Daten differenziert werden.
Hat schon einmal jemand etwas in dieser Richtung gemacht und vielleicht ein paar Tipps für mich?
Gruß Matthias
-
sowas haben schon viele gemacht, man nennt sowas ein
Übertragungsprotokoll.
Man nehme ein definiertes Startzeichen, damit der Empfänger
weiß, jawoll, hier gehts los.
Dann die 3 x 2 Byte, dann ein definiertes Stop-Zeichen
-
Da ich mich, wie gesagt, mit dem Programmieren erst seit kurzem beschäftige, muss man so etwas erst einmal wissen. Außerdem ist das EasyRadio-Modul eigentlich eine bequeme Variante der Datenübertragung, da man sich nicht ums Übertagungsprotokoll kümmern muss.
So nun aber wieder zu meinem Problem. Habe im Forum etwas gefunden, wie ich den vom ADC eingelesenen Wert mit nem Startbit versehe und dann auf den zweiten Controller sende.
Hier der Code:
Code:
Dim X As String * 5
Dim X_wert As Word
X_wert = Getadc(0)
X = Hex(x_wert)
X = "H" + X
Print ; X
Das funktioniert auch so weit. Den gesendeten Wert kann ich am zweiten Controller wieder als string empfangen, aber das Zurückwandeln funktioniert nicht.
Hatte folgendes überlegt:
Code:
Dim X_empfangen As String * 5
Dim Kanal As String * 1
Dim Wert_hex As String * 4
Dim Wert As Word
X_empfangen = Inkey()
Kanal = Left(x_empfangen , 1)
If Kanal = "H" Then
Wert_hex = Right(x_empfangen , 4)
Wert = Hexval(wert)
Print #2 , Wert
End If
Wahrscheinlich funktioniert das alles ganz einfach, man muss nur wissen wie. Und genau deshalb brauch ich noch ein bißchen Unterstützung..
Gruß Matthias
-
ääääh ich bin nicht so der held aber : warum willst du denn werte als string speichern ????
-
das ist das einzige was ich zum Thema Übertragungsprotokoll gefunden habe, das so aussah als würde es mir weiterhelfen. Dass ich eigentlich nicht mit string arbeiten muss, habe ich mir schon fast gedacht, habe aber auch keine Ahnung wie es sonst gehen soll...
-
das kann man als string machen, warum auch nicht.
beispiel:
x123456y als sendestring, das x definiert den start, y als Ende.
so kann man's machen.
eine andere Variante währe die 9-Bit-Methode.
Man benutzt das neunte Bit um den Start zu definieren, dann evtl.
das erste Byte als Anzahl der zu übertragenden Bytes und schon weiß
der Empfänger was geht.
Oder Beispiel Profibus, Hardware ist ganz normale rs485, nur das
Übertragungsprotokoll macht draus ne Profibusanwendung
-
es ist ja schon einmal gut, dass ich mit dem Sendestring gar nicht so falsch liege. Einen String zu schicken, der am Anfang und am Ende ein gewähltes Zeichen enthält funktioniert ja auch.
Aber wie erkläre ich jetzt meinem Empfänger was das Start-, was das Endzeichen ist und was er mit den Werten dazwischen machen soll?
Das Problem ist ja, dass die gesendeten Daten auf dem Controller als ASCII-Werte ankommen (Inkey()).
Und genau hier komme ich auch nicht weiter...
wie bekomme ich die Werte wieder in einen String, den ich dann mit mid(), left() oder right() auslesen kann....???????
oder bin ich mit meiner Denke mal wieder auf dem Holzweg?
Gruß Matthias
-
Zeichen zu einem String zusammenführen ist keine große Sache.
Die Zeichen werden im ASCII-Format kodiert verschickt.
Jedes Zeichen steht für einen 8 Bit Code (0 bis 255).
Nehmen wir beispielsweise das Zeichen "A" dann weiß
der Fachmann, aha, das Zeichen A hat die Kodierung
Dezimal 65 oder binär 01000001, wenn ich mich nicht
verrechnet hab.
Du empfängst also über die UART einen Zahlenwert, der
für ein bestimmtes Zeichen steht. Welches Zeichen
für was das dindeste leicht per Suchmaschine im Netz
unter dem Stichwort ASCII.
Dann gibts noch die Stringfunktionen von Bascom
für das aneinanderreihen.
Zunächst mal kann man den Zahlenwert ins Stringformat
bringen per Befehl chr(x), wobei x für den Zahlenwert
steht. Also
string=chr(zahlenwert 0-255)
dann das aneinanderreihen
per
string2=string2+string und schon werden die Zeichen
aufgereiht.
-
soweit habe ich das verstanden. Allerdings sende ich z.b. X350 (X für X-Wert und 350 der eingelesene Wert), also kommt auf der Empfängerseite der ASCII-Code 88(=X) 51(=3) 53(=5) 48(=0).
Mit chr() erhalte ich dann auch wieder X350. Das Problem ist nur, dass ich eigentlich festlegen will, wenn die erste stelle ein X ist, verarbeite die folgende 350 weiter, wenn die erste Stelle ein Y ist, verarbeite den folgenden Wert weiter...
Müsste ja eigentlich mit den Funktionen left(), mid() funktionieren. Tut es aber nicht, da chr() mein X350 als string*1 speichert..
Hoffe man versteht wo mein Problem liegt.
Gruß Matthias