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
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...
Etwas mager... Das Byte 1 um 1 byte nach recht verlaengern, dann 1 position nach rechts schieben, dann byte2 hinzuzaehlen (ODERn)
1 | byte1: 0 0 0 0 0 0 0 0 1 D13 D12 D11 D10 D9 D8 D7 |
2 | um 7 Stellen nach links: |
3 | byte1: 0 1 D13 D12 D11 D10 D9 D8 D7 0 0 0 0 0 0 0 |
4 | Die 1 vorne weg: |
5 | byte1: 0 0 D13 D12 D11 D10 D9 D8 D7 0 0 0 0 0 0 0 |
6 | | byte2: 0 0 0 0 0 0 0 0 0 D6 D5 D4 D3 D2 D1 D0 |
7 | --------------------------------------------------------------------- |
8 | => 0 0 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 |
also gut, in C : word = (byte2 | (byte1<<7) & 0x3fff;
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
Hi, unsigned int erg = (((unsigned int) (byte1 & 0x1F)) << 7) + byte2; Sollte gehen. Gruß
Martin S. wrote:
> @johannes: super danke du sack!
Das nehm ich persönlich...
ja, komplimente sollte man persönlich nehmen ;-) nomma thx an alle, lief auf anhieb! gruß ken
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.