Benötige Hilfe beim Bitwackeln

OP #5140690
Hi zusammen,

ich suche einen Weg um die 2 Werte miteinander zu vereinen um das 
gewünschte Ergebnis zu erziehlen:

Wert1: 0b00010000
Wert2: 0b00000000

Ergebnis: 0b00000000
--------------------------------
Wert1: 0b00010001
Wert2: 0b00000000

Ergebnis: 0b00000001
--------------------------------
Wert1: 0b00001110
Wert2: 0b11110000

Ergebnis: 0b11111110
--------------------------------

Der Rechenweg muss immer der Selbe sein.

Stehe ich grad auf dem Schlauch oder ist es nicht möglich diese drei 
Operationen mit dem selben Rechenweg zu lösen?

Das erste Bit (Stelle 1) kann also vom Wert 1 direkt in das Ergebnis 
wandern. Nur mit den restlichen 7 Bits komme ich nicht klar...

Danke, Gruß
Matthias
OP #5140708
Ja, es geht um die Umwandlung eines 28.0 Wertes in Hex um diesen über 
einen SPI Bus zu übertragen.

Es scheitert jetzt an diesem letzten Schritt. Alle anderen Werte 
stimmen.

Was ich noch vergessen hatte:

Wert2 = Wert1^0x08



Aus dem Herstellerforum hab ich diesen Rechenweg gefischt:

float fParam = 1.0;
unsigned short usAddress = 0x0004;

long param223;
long param227;

param223 = fParam * 0x800000;
param227 = param223 + 0x8000000;

param_hex[3]=(unsigned char)param227;  //get byte 3 (LSBs) of parameter 
value
param_hex[2]=(unsigned char)(param227>>8); //get byte 2 of parameter 
value
param_hex[1]=(unsigned char)(param227>>16); //get byte 1 of parameter 
value
param_hex[0]=(unsigned char)(param227>>24);
param_hex[0] = param_hex[0] ^ 0x08;

RegisterWrite(0x68, usAddress, 4, param_hex);

Funktioniert wie gesagt auch bis auf diesen letzten Schritt. Dort häng 
ich nun...
#5140736
@Matthias Machmal (matthiasm)

>Ja, es geht um die Umwandlung eines 28.0 Wertes in Hex um diesen über
>einen SPI Bus zu übertragen.

Was soll ein 28.0 Wert sein? Eine Festkommazahl mit 28 Bit Vorkomma und 
0 Bit Nachkomma?

>Wert2 = Wert1^0x08

>Aus dem Herstellerforum hab ich diesen Rechenweg gefischt:

Um welchen IC handelt es sich? Datenblatt? Siehe Netiquette.
#5142439
Meine Güte plapperst du konfus daher.

Warum denn Q28.0 in "hex" umwandeln, um es per SPI zu übertragen.
Q28.0 ist nichts anderes als eine signed 32-bit Zahl, wobei die oberen 4 
bit alle Vorzeichenbits sind.
Kann man also trotzdem einfach in 4 Bytes über SPI übertragen.

Da du den Beitrag aus dem "Herstellerforum" ja nicht verlinkt hast, tue 
ich dies mal:
https://ez.analog.com/thread/78737

Da ist eine Funktion zu sehen, die offensichtlich Q5.23 verwendet.
Was das mit deinen Q28.0 zu tun haben soll ist mir schleierhaft.
Auch ist dieser dort genannte Codeschnipsel wenig selbsterklärend.
Was soll denn "param223" und "param227" sein.
Und was das "param_hex[0] = param_hex[0] ^ 0x08;" soll weiss auch nur 
der werte Herr Programmierer selbst.
Genauso wie was diese Funktion mit "hex" zu tun haben soll. Für Q28.0 
(und auch für Q5.23) in hex bräuchte man 8 Bytes.

Definiere dein Problem (Ziel) klar und nachvollziehbar, und dann kann 
dir geholfen werden. So hat das jedenfalls keinen Sinn.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.