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...
Gast
#1161764
Etwas mager... Das Byte 1 um 1 byte nach recht verlaengern, dann 1 position nach rechts schieben, dann byte2 hinzuzaehlen (ODERn)
Gast
#1161768
Hallo, in C : word = byte2 | (byte1<<7)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Gast
#1161786
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.