Forum: Mikrocontroller und Digitale Elektronik Benötige Hilfe beim Bitwackeln


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Matthias M. (matthiasm)


Bewertung
-2 lesenswert
nicht 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

: Bearbeitet durch User
von Cyblord -. (cyblord)


Bewertung
0 lesenswert
nicht lesenswert
Das ist völlig sinnfrei. Gibt's dahinter ein System welches du in einem 
Satz beschreiben kannst oder wird das ein Zahlenrätsel?
Sag mal wozu das machen willst.

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist noch unterbestimmt. Wir benoetigen viel mehr 
infomationen

von Matthias M. (matthiasm)


Bewertung
0 lesenswert
nicht 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...

von Falk B. (falk)


Bewertung
0 lesenswert
nicht 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.

von Matthias M. (matthiasm)


Bewertung
-1 lesenswert
nicht lesenswert
Falk B. schrieb:
> Was soll ein 28.0 Wert sein? Eine Festkommazahl mit 28 Bit Vorkomma und
> 0 Bit Nachkomma?

Ja.

>Wert2 = Wert1^0x08
>
>>Aus dem Herstellerforum hab ich diesen Rechenweg gefischt:
>
> Um welchen IC handelt es sich? Datenblatt? Siehe Netiquette.

ADAU1452 von Analog Devices.

von Patrick J. (ho-bit-hun-ter)


Bewertung
0 lesenswert
nicht lesenswert
Hi

Rieche nur ich hier die Salami?

Was hast Du überhaupt vor?
Bitte in einfachen Sätzen, daß auch ich Das verstehen kann.

MfG

von Joe F. (easylife)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Matthias M. schrieb:
> ich suche einen Weg um die 2 Werte miteinander zu vereinen

Was soll denn "vereinen" sein?
Mit den 3 Zahlenpaaren kann niemand was anfangen.
Gib doch einfach die Formel an, die Du berechnen willst.

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]
  • [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.