-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Daten senden/empfangen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Ort
    Köln
    Beiträge
    19

    Daten senden/empfangen

    Anzeige

    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)

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Ort
    Köln
    Beiträge
    19
    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

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    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
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Ort
    Köln
    Beiträge
    19
    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

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    ääääh ich bin nicht so der held aber : warum willst du denn werte als string speichern ????

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Ort
    Köln
    Beiträge
    19
    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...

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    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
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Ort
    Köln
    Beiträge
    19
    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

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    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.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Ort
    Köln
    Beiträge
    19
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •