Bits aus Sensordaten entfernen

Gast #5076054
Hallo Community,

ich probier gerade das erste Mal das Mikrocontroller-Programmieren aus.
Ich benutze dabei das 2GO Kit von Infineon zum Strommessen 
(https://www.infineon.com/cms/en/product/promopages/sensors-2go/?redirId=56270#current-sensor-2go). 
Unser Sensor TLI4970-D050T4 sendet über SPI die Daten an den XMC1100 
Mikrocontroller. Die ersten dieser Bits (Parity Bit, Status Bit..) 
enthalten dabei nicht den Stromwert, den ich auf dem Bildschirm ausgeben 
möchte.
Meine Frage: Wie kann ich auf einzelne Bits zugreifen (also für das 
Speichern der Stromwerte die ersten Bits "entfernen")?

Danke im Voraus!
Gast
1
unsigned int funktion (unsigned int value){
2

3
unsigned int maske = 0x80000000;
4

5
 return (value & maske);
6

7
}

Probiers mal damit.

funktion(0xFFFFFFFF) ergibt dir z.B. 0x0x7FFFFFFF, also maskiert den 
ersten bit aus. Weitere Bits analog dazu, einfach Maske anpassen.
Gast
Ich verstehe das mit dem Maskieren auch noch nicht so ganz. Ich möchte 
das erste Bit auslesen (1 für Status-, 0 für Messsignal) und daraufhin 
bei 0 nur die letzten 13 von 16 Bit zurückgeben. Könnt ihr hierfür bitte 
ein Beispiel reinstellen. (Wie funktioniert das Konvertieren in 
Binärzahlen?)
Gast
Ralf schrieb:
> (Wie funktioniert das Konvertieren in Binärzahlen?)
Wieso sollte sich ein Prozessor für die Zahlendarstellung interessieren?

1
int funktion(int input){
2
If ((input & 0x8000) == 0) return (input & 0x1FFF);
3
else return input;
4
}

Den alternativen Return-Wert musst du noch definieren.
Gast
Das ist die hexadezimale Schreibweise (0x kennzeichnet Hexwerte) für die 
Bitmuster
= 8   0    0    0    hex
1000 0000 0000 0000  bin

Jede Ziffer aus 0x8000 beschreibt 4 binäre Ziffern, 1111 wäre 2^0 (1) + 
2^1 (2) + 2^2 (4) + 2^3 (8) = 15 dezimal oder F hexadezimal.

Die 8 ganz vorne steht also für die Wertigkeit 8 im Binärsystem 
(2^3=8), selektiert dir aber, wenn du die Binärdarstellung oben 
ansiehst, genau das linkeste Bit (in deinem Fall also das erste Bit).

Bei 0x1FFF läuft es analog.

= 1    F   F    F    hex
0001 1111 1111 1111  bin

Es werden also die 13 Bits von rechts selektiert. Du hättest anstelle 
der Hex-Maskierungen auch die entsprechenden binären Darstellungen 
verwenden können.
Hi

Patrick schrieb:
> Du hättest anstelle
> der Hex-Maskierungen auch die entsprechenden binären Darstellungen
> verwenden können.

Hier ist aber Aufpassen angesagt!
Wenn hier eine Ziffer fehlt, macht der Code nur noch 'Müll' und man 
sucht Sich einen Wolf.
Ob Du nun im Code
%0001111111111111
oder
%000111111111111
stehen hast - da musst Du schon genau hin gucken. (beim Unteren fehlt 
eine 1)
Da ist die HEX-Schreibweise besser geeignet:
0x1FFF
1 0001
F 1111
F 1111
F 1111

0-9 entsprechen 0-9 (oha, Wer hätte Das gedacht ;))
A 10
B 11 geht noch im Kopf ohne Probleme
C 12 per 'cwölf' kann man sich merken, daß 'C' den Wert 12 hat
D 13 per 'Dreizehn' ist das Merken auch hier wieder einfach
E 14 ist '1 vor Hinten' - also 14, auch nicht schwer zu merken.
F 15 ist der Maximal-Wert, also 15

Bei C und D hatte ich früher 'meine Probleme' und zählte die Wertigkeit 
immer aus, bis hier im Forum 'Cwölf' (für Zwölf, falls Das noch nicht 
klar wurde) und 'Dreizehn' von einem cleveren Mitmenschen in den Raum 
geworfen wurde.

MfG

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.