-         

Ergebnis 1 bis 8 von 8

Thema: Zerlegen von empfangenen Daten!?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    26.09.2006
    Ort
    Eberspoint (84149 Velden)
    Beiträge
    40

    Zerlegen von empfangenen Daten!?

    Anzeige

    Hey, Suche schon eine weile, weiß aber leider nicht nach was ich suchen soll.
    Ich will folgendes machen: Controller1 sendet über UART (Txd -> Rxd) einige Daten zu Controller2. Bis jetzt ist es noch ganz einfach. Die Daten werden ca. so aussehen: 0101100 oder so ähnlich! (01 steht für Board, 01 für Servo und 100 für Position, die Werte verändern sich stehtig!)
    Wie kann ich die ankommende Nachricht im Controller2 zerlegen?

    Danke im Vorraus

    PS: Arbeite zur Zeit mit Bascome und da gibt es eine super große Hilfe, aber nach was muss ich suchen?

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Ich kenne mich mit Bascom nicht aus, daher kann ich Dir keine Lösung in Programmform liefern. Ich versuchs zu beschreiben:

    Generell geht das ganze mit shiften und ausmaskieren.
    um z.B. die oberen 2 Bits zu bekommen, schiebst Du einfach die Daten um 5 Bit nach rechts und fertig.

    Um die mittleren 2 Bits zu bekommen, schiebst Du die Daten um 3 Stellen nach rechts. dann erhälst Du aber 0101 - Du musst also noch die oberen 2 Bit ausmaskieren. Das machst Du dann mit einem Bitweisen UND (in C wäre das "& 0b11"

    Die unteren 3 Bit muss Du nicht schieben, sondern nur ausmaskieren.

    Ich hoffe, das hilft schon mal weiter.

    Gruß,
    askazo

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.08.2006
    Ort
    Budapest
    Alter
    30
    Beiträge
    563
    Also wenn die Position in den letzten 3 Bits steht, machst du Befehl AND 0b00000111.

    Damit werden die ersten 5 Bits des Befehls 0, die letzten 3 bleiben erhalten, und du hast rein die Position, die du dann weiterverarbeiten kannst.

    MfG

    pongi

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    26.09.2006
    Ort
    Eberspoint (84149 Velden)
    Beiträge
    40
    Verstehe noch nicht ganz, wie ich das in meinen Text einbauen muss!
    Kann mir jemand Bascom suchen muss, damit ich ein Beispiel oder so was bekomme*

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    26.09.2006
    Ort
    Eberspoint (84149 Velden)
    Beiträge
    40
    Ach ja und das Beispiel von mir war etwas blöde! Die eingehende Nachricht besteht nicht nur aus 0 und 1, es können alle Zahlen vorkommen! (z.B: 0908056)

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    na prima ... vermutlich sendest du einfech per Print befehl.
    wenn das letzte zeichen gesendet wurde schließt du dann hoffentlich mit cr-lf ab,
    oder?
    dann ists nämlich einfach. Dann kanste die zeichen bis cr empfangen in
    einen String schiebem und da legste dir n overlay arra drüber und schon
    kannste dir das einzelne Zeichen auslesen. Dann ne einfache Subtraktion
    und schon haste den "echten" zahlenwert.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    26.09.2006
    Ort
    Eberspoint (84149 Velden)
    Beiträge
    40
    OK alles klar, so in der art habe ich mir das auch forgestellt aber mit einfacher Subtraktion haut es nicht hin.
    Kannst du mir das in einen kurzen Quelltext packen oder sagen, wo man das nachlesen kann. Bei Bascom finde ich zu overlay irgendwie nicht das richtige

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    is ganz einfach ...

    geht sogar ohne Overlay, wenn ichs recht überlege.

    aber zu erst mal kleine info zu Overlay.

    Man kann

    Dim string_variable as string * 20
    dim Zeichenarray (20) as byte at string_variable overlay machen
    und so jedes einzelne Zeichen als Bytewert im ASCII auslesen.
    ganz easy. ... brauchen wir aber in dem Fall dann doch nicht

    die andere Geschichte geht genauso leicht.

    zunächst mal brauchste ne empfangsroutine, die am Besten
    als Interrupt ausgeführt wird.
    Also On URXC empfangsroutine
    dim empfangenes_byte(20) as byte
    dim telegrammflag as byte
    dim zeiger as byte
    zeiger=1

    empfangsroutine:
    empfangenes_byte(zeiger)=UDR
    if empfangenes_byte =13
    telegrammflag=1
    endif
    incr zeiger
    return

    dann musste nur noch indeiner Mainloop die Verarbeitung einbauen

    do
    .......

    if telegrammflag=1 then
    telegrammflag=0
    ' hier schreibste dann einfach Deine Telegrammverwendung rein.
    ' Die ASCII im Arra kannste einfach per Substraktion von &H30
    ' in Zahlen zurückverwandeln
    zeiger=1
    endif
    .......
    loop
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Berechtigungen

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