-         

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

Thema: 4 getrennte Bytees in eine Long/Single Varible wandeln

  1. #1
    Neuer Benutzer Öfters hier Avatar von Claus Mehrholz
    Registriert seit
    13.01.2005
    Ort
    Bad Honnef
    Beiträge
    20

    4 getrennte Bytees in eine Long/Single Varible wandeln

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Möchte gern 4 aufeinander folgende Bytes in eine Long/Single Varible Wandeln

    Von einem Gerät lese ich 16 Bytes per UART
    in eine Indizierte Variable in den AT Mega 8
    z.B Y(i); Y(i+1); Y(i+2); ... bis Y(i+n)
    und habe nun Zugriff auf jedes einzelne Byte.

    Die Betriefsfrequens des angeschlossenen Gerätes
    liegt beispielsweise in den vier Bytes 2-5.
    Meine Idee ist nun diese Information in einer
    Größeren Long/Single Variablen weiter zu verarbeiten.

    Wie also bringe ich die Information
    aus vier einzel Bytes z.B
    &B 00000010 10111110 11100001 10000000 = &d 4606400
    in eine Long/Single Variable um sie dort durch 16
    zu teilen und anschl mit 10 zu multiplizieren damit
    ich die augelesene Frequenz von 28.790.000 zu erhalten
    und anzuzeigen.

    Oder bin ich da komplett auf dem Holzweg ??

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    Dim Eins As Byte At &H60
    Dim Zwei As Byte At &H61
    Dim Drei As Byte At &H62
    Dim Vier As Byte At &H63

    Dim Erg As Long At &H60 Overlay

    Eins = 255
    Zwei = 1
    Drei = 0
    Vier = 0

    Erg = Erg + 1

    Do
    Print Erg
    Loop
    End
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Gast
    Vielen Dank, für Deinen Tipp. Habe nun das Problemchen lösen können.
    Beste Gruesse aus Bad Honnef, Claus

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Habe nun das Problemchen lösen können.
    Wie denn, so wie x-ryder meinte?
    Könnte man nicht einfach so:

    Single = byte
    Single * 256
    Single + byte
    Single * 256
    ...

    MFg moritz

  5. #5
    Neuer Benutzer Öfters hier Avatar von Claus Mehrholz
    Registriert seit
    13.01.2005
    Ort
    Bad Honnef
    Beiträge
    20
    ...mehrfach habe ich versucht Deine Idee nachzuvollziehen... bislang ohne Erfolg, bitte sei so gut und formuliere ein bischen mehr Text.

  6. #6
    Gast
    Liegen die Informationen im übergebenen String im ASCII-Format (= Klartext) oder im Binärformat vor.
    Nur mit dieser Information kann hier eine zielführende Information gegeben werden.

    Viele Grüße
    Josef

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Sorry, ich dachte es wäre verständlicher, aber kein Problem. Also meine Idee ist, eine Single/Integer o.ä. Varialbe zu nehmen und sie jeweils mit einem Byte zu beschreiben. Als erstes nehmen ich z.B. das erse von 4 Bytes (Byte1) und schreibe es in die Single-Varaible:

    Single=Byte1

    Nun verschiebe ich das Byte innerhalb des Singles nach links, dafür gibt mit Sichherit auch eine andere Anweisung, ich mache es einfach rechnerisch:

    Single = Single x 256

    Im Single siehts dann also so aus:
    [leeres Byte][leeres byte][byte 1][leeres byte]

    Nun schreibe ich hinten wieder ein byte rein:

    Single = Single + Byte 2

    verschiebe es wieder...

    Im Grunde mache ich dsa genau so wie x-ryder, nur das er den Speicher des Singles direkt anspricht.

    Vielleicht geht es aber auch so:

    Single.1 = Byte.1

    Also bei Bytes kann man ja die einzelnen bits direkt ansprechen. Ob das auch mit Bytes geht, weiß ich nciht. Es wäre aber vermutlich zuviel Arbeit, wenn man jedes Bit einzelnd an die richtige Stelle schreiben würde.

    @x-ryder:

    Woher weißt du welchen Speicherplatz die Variable einnimt. Weiß man das z.B. dadurch, dass man sie als erste deklariert und Variablen einen bestimmten Speicherplatz (Adresse) haben?

    MFG Moritz

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Hi, Claus !
    Es geht darum, daß ein Speicherbereich von zwei Funktionen einfach verschieden gesehen wird. "REDEFINE"
    Die UART Rx/Tx kennt nur Byte-Folgen
    Deine Anwendung sieht da aber eine Daten-Struktur.
    Dazu gibt's eben eine Speicher-Redefinition mit AT xxx OVERLAY

    Konkret (Beispiel):
    Daten-Struktur:
    dim Header as Byte ' steht z.B. auf addr. &H0060
    dim Value as single ' steht z.B. auf addr. &H0061
    dim Param as integer ' steht z.B. auf addr. &H0065
    dim nochwas as word ' steht z.B. auf addr. &H0067

    Und jetzt die re-definition als Byte-stream
    dim Message(9) as byte AT Header OVERLAY
    ' steht jetzt auch auf addr. &H0060 und deckt mit länge 9 genau die obige Struktur ab

    Die UART liest und schreibt message(n) (n= 1-9)

    Die Applikation liest & schreibt aber header, value, param, etc.


    @josef da ging's um "CONVERSION", das is was anderes

    logo ? mfg robert

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    hehe piknick haste meinen beitrag übersehen???



    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    @x-ryder: nein, hab ich nicht übersehen, hast ja recht, de facto isses eh dasselbe, *knieundbodenküssenderSmiley*
    nur mit der UART hast du ja normalerweise einen Counter/Zeiger auf das aktuelle Byte, da kannst du mit EINS, ZWEI,... nix rechtes anfangen, oder willst einen case Select nehmen ?
    mfg robert

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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