- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 4 von 4

Thema: 16bit Daten teilen und zusammensetzen [erledigt]

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.12.2006
    Beiträge
    205

    16bit Daten teilen und zusammensetzen [erledigt]

    Anzeige

    E-Bike
    Hallo

    Ich möchte 16bit Daten per I2C übertragen. Dafür zerlege ich eine 16bit Variable so:
    Code:
    wert_h = (int8_t)(wert<<8)
    wert_l = (int8_t)(wert)
    stimmt das soweit?

    dann schicke ich zuerst wert_h und dann wert_l per I2C.
    Wie muss ich denn jetzt die beiden Werte am anderen Controller wieder zusammensetzen? Hab momentan noch meine Probleme mit den ganzen Bitsachen in C. Wär nett wenn ihr mir da weiterhelfen könntet.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    stimmt das soweit?
    Leider nein,
    im wert_h steht bei Dir immer 0 und zwar schiebst Du wert 8 Stellen nach links, dabei rutschen von rechts 8 Nullen rein und mit dem Cast schneidest Du die oberen 8 Stellen ab.
    Was bleibt über ? Null...

    Code:
    wert_h = (int8_t)(wert>>8);
    wäre richtig gewesen.

    zusammensetzen ist auch einfach
    Code:
    int16_t wert= (wert_h<<8)|wert_l;
    Was hälst Du von einer Union:
    Code:
    typedef union {
     int16_t wert;
     int8_t wert_bytes[2];
    } eine_zahl;
    zugriff:
    Code:
    eine_zahl test;
    test.wert=1234;
    
    i2c_send (test.wert_bytes[0]); // sendet die unteren 8 Bytes
    i2c_send (test.wert_bytes[1]); //sendet die oberen 8 Bytes
    Auf der andern Seite machst Du das genauso, die erste Zahl in bytes[0] und die zweite in bytes[1] packen, mit test.wert kannst Du auf Deine 16 Bit Zahl zugreifen.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.12.2006
    Beiträge
    205
    super, vielen Dank funktioniert jetzt.
    Habs allerdings ohne union gemacht sondern einfach mit zwei Variablen, da ich das bei mir eh alles in einer eigenen I2C Funktion verpackt habe, die nur den 16bit Wert bekommt und diesen dann teilt und verschickt.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Habs allerdings ohne union gemacht sondern einfach mit zwei Variablen
    Ja 16 Bit sind einfach zerlegt, da zeigt die Union vielleicht nicht ganz so ihre Stärken, aber wenn Du mal 32 Bit zerlegen mußt, behalte sie im Hinterkopf

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

Berechtigungen

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

Solar Speicher und Akkus Tests