Benötige Hilfe beim Bitwackeln

OP #5140690
Lesenswert?

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
Lesenswert?

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
Lesenswert?

@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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren