www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Dezimal zu 2er Komplement


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

zu meiner Schande schaffe ich es nicht eine negative Dezimalzahl ins 2er 
Komplement umzurechnen.
Hier meine Umrechnungsfunktion:
uint8_t dec2comp(int8_t value)
{
    uint8_t x;
    if(value < 0)
    {
        x = ~value;
        x++;
    }
    else
        x = value;

    return x;
}

Ich benötige dies um einen MMA7455 Beschleunigungsensor zu kalibrieren.
Wenn die umzuwandelnden Werte positiv sind, funktioniert meine 
Kalibrierungsroutine. Falls sie negativ sind, klappt es nicht.

Daraus folgere ich dass ich korrekt in die Register des 
Beschleunigungssensors schreibe.

Hat jemand von euch eine Idee?

Autor: Seltsam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> int8_t value
  ^^^^^^

Für value < 0 ist ist das Bitmuster bereits ein Zweierkomplement.
https://secure.wikimedia.org/wikipedia/de/wiki/Zwe...

Und hier?
Beitrag "2er Komplement beim MMA7455 wie bilden?"

Autor: Kai S. (zigzeg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> zu meiner Schande schaffe ich es nicht eine negative Dezimalzahl ins 2er
> Komplement umzurechnen.

Ich glaube hier ist ein Denkfehler. Normalerweise sind negative Zahlen 
IMMER in 2er Komplement Binaer-Darstellung.

Du kannst also vermutlich einfach 'value' benutzen, ganz ohne 
"Umrechnung".

Was Deine Funktion macht ist, alle negativen Zahlen in positive 
umzuwandeln, d.h. das Vorzeichen "wegzuschmeissen" ("Betragsfunktion", 
engl. "ABS").

ZigZeg

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe es so dass für positive Werte da Bitmuster bereits ein 2er 
Komplement ist

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider klappt das auch nicht

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> zu meiner Schande schaffe ich es nicht eine negative Dezimalzahl ins 2er
> Komplement umzurechnen.
Du willst vermutlich einfach den Betrag der Beschleunigung?
Dann dürfte das hier Sinn machen:
   if (value<0) x = -value;
   else         x = value;

BTW:
Die Zahlendarstellung aus dem DB kommt von Verilog:
10 Bit Darstellung:
Signed byte data (2’s complement): 0g = 10’h000
8 Bit Darstellung:
Signed byte data (2’s complement): 0g = 8’h00

Breite_'_Basis_Wert ==>
10 Bits, Hex 000 = 10'h000
8 Bits, Hex 00   = 8'h00

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die Werte der Beschleunigung berechne ich korrekt.
Hier geht es um die Kalibrierung, dh ich muss 2er Komplement Zahlen in 
die Offset Register des Sensors schreiben

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> ich muss 2er Komplement Zahlen in
> die Offset Register des Sensors schreiben
Jede normale vorzeichenbehaftete Binärzahl wird heute üblicherweise im 
Zweierkomplement dargestellt. Du mußt vermutlich ganz einfach gar 
nichts machen...

Oder sag doch mal die Stelle im DB, die dir solches Kopfzerbrechen 
macht.

Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ab S.14 wird die Kalibrierung erklärt
Wenn ich gar keine Umwandlungen mache, klappts auch nicht

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.