mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem bei Umrechnung von MSL/LSB in 12 bit Messwert


Autor: Martin S. (keniff)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey zusammen!

steh jetzt schon seit stunden vor dem genannten problem!

hab an einem ATmega32 ein lasersensor, der messdaten in 2 byte 
verschickt.

das problem dabei ist der komische aufbau der beiden bytes (MSB/LSB):

byte1: 1 - D13 - D12 - D11 - D10 - D9 - D8 - D7
byte2: 0 - D6  - D5  - D4  - D3  - D2 - D1 - D0

wobei D13 und D12 immer den wert 0 haben.
das ergebnis sollte dann so aussehen:

0-0-D13-D12-D11-D10-D9-D8-D7-D6-D5-D4-D3-D2-D1-D0

würd dann auf nen interger wert von 0-4096 kommen

hab mir schon alle möglichen threads angesehn, was bit operatoren und 
byte verrechnung betrifft, nur hats nicht wirklich weitergeholfen.

kennt sich da einer besser mit aus und würde mir die thematik mal näher 
bringen, oder kann mir sagen, wie ich den hebel ansetzen muss?! ,-)

vielen lieben dank! gruß keniff

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist das Problem? byte1 um 7 Stellen nach links schieben (in einer 
16-Bit-Variable) und byte2 dazuODERn. Wie das in der von Dir 
verwendeten, geheimnisvollen Programmiersprache aussieht, kann ich Dir 
leider nicht sagen...

Autor: Hoch das Glas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Etwas mager... Das Byte 1 um 1 byte nach recht verlaengern, dann 1 
position nach rechts schieben, dann byte2 hinzuzaehlen (ODERn)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

in C : word = byte2 | (byte1<<7)

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  byte1: 0   0   0   0   0   0   0   0  1  D13 D12 D11 D10 D9  D8  D7
  um 7 Stellen nach links:
  byte1: 0   1  D13 D12 D11 D10 D9  D8  D7  0   0   0   0   0   0   0  
  Die 1 vorne weg:
  byte1: 0   0  D13 D12 D11 D10 D9  D8  D7  0   0   0   0   0   0   0
| byte2: 0   0   0   0   0   0   0   0   0 D6  D5  D4  D3  D2  D1  D0
---------------------------------------------------------------------
=>       0   0  D13 D12 D11 D10 D9  D8  D7 D6  D5  D4  D3  D2  D1  D0

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also gut,

in C : word = (byte2 | (byte1<<7) & 0x3fff;

Autor: Martin S. (keniff)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow ihr götter! 4 antworten in 10 minuten! not bad ,-)
ja, vergess es immer zu erwähnen
progge mit winvar in c.

@johannes: super danke du sack! dein diagramm is so verständlich, dass 
mir jetz die frage peinlich ist ;-)
nee, im ernst, echt danke an alle für so schnelle und präzise antworten!

werds gleich ma testen...

gruß keniff

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

unsigned int erg = (((unsigned int) (byte1 & 0x1F)) << 7) + byte2;

Sollte gehen.

Gruß

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin S. wrote:
> @johannes: super danke du sack!
Das nehm ich persönlich...

Autor: Martin S. (keniff)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, komplimente sollte man persönlich nehmen ;-)
nomma thx an alle, lief auf anhieb!
gruß ken

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.