10 bitar till 4 bitar
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
10 bitar till 4 bitar
Vet inte om frågan ska ligga här eller under Inbyggda system. Vi får se.
Om jag läser ur ett ADC-värde på en MCU där ADC:n har 10-bitars upplösning. Hur skalar jag enklast ner det här i kod så det bara blir 4 bitar?
Tänker jag rätt om jag bara bit-skiftar genom var = var >> 6;?
Om jag läser ur ett ADC-värde på en MCU där ADC:n har 10-bitars upplösning. Hur skalar jag enklast ner det här i kod så det bara blir 4 bitar?
Tänker jag rätt om jag bara bit-skiftar genom var = var >> 6;?
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: 10 bitar till 4 bitar
Kanon. Tack.
En anledning till varför jag frågar är att jag har något vagt minne om fler saker man ska tänka på när man bit-skiftar att det är tex inte säkert att det "fylls på med nollor", utan man ska göra något ytterligare efter ett bitskiftning. Minns jag fel? Finns det risk att det skiftas in annat än 0:or?
En anledning till varför jag frågar är att jag har något vagt minne om fler saker man ska tänka på när man bit-skiftar att det är tex inte säkert att det "fylls på med nollor", utan man ska göra något ytterligare efter ett bitskiftning. Minns jag fel? Finns det risk att det skiftas in annat än 0:or?
- Klas-Kenny
- Inlägg: 11369
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: 10 bitar till 4 bitar
Brukar i såna lägen köra
var=(var>>6) & 0xf;
Så är man 100% säker på vad man får.
var=(var>>6) & 0xf;
Så är man 100% säker på vad man får.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: 10 bitar till 4 bitar
Men hur fungerar det då?
Då AND:ar man in 8 st 1:or och om det skulle "råka" komma med en 1:a när man bit-skiftar så blir det ju en 1:a igen. Eller tänker jag fel?
OBS. Det här kanske inte är ett verkligt problem. Bara att jag har i bakhuvudet att man skulle "maska" ur sitt värde riktigt för att vara säker på att inte massa skräp kommer med när man bit-skiftar.
Då AND:ar man in 8 st 1:or och om det skulle "råka" komma med en 1:a när man bit-skiftar så blir det ju en 1:a igen. Eller tänker jag fel?
OBS. Det här kanske inte är ett verkligt problem. Bara att jag har i bakhuvudet att man skulle "maska" ur sitt värde riktigt för att vara säker på att inte massa skräp kommer med när man bit-skiftar.
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: 10 bitar till 4 bitar
Kolla så din ADC ger "unsigned" ut, dvs 0..1023. Ger den "signed" ut, dvs -512..511 blir det lite mer pill.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: 10 bitar till 4 bitar
@lillahuset: Den här gången är jag nog skonad. Verkar som att den ger "unsigned" ut.
Så var det ja XorXaX! Då blir det som att jag AND:ar 0x0F vilket verkligen maskar ur dom nedersta 4 bitar.
Tack!
Så var det ja XorXaX! Då blir det som att jag AND:ar 0x0F vilket verkligen maskar ur dom nedersta 4 bitar.
Tack!
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: 10 bitar till 4 bitar
ADC:n returnerar ett tal mellan 0-1023. Det är alldeles för stort för vad jag ska använda det till.
Däremot 0-15 kan jag använda direkt i min formel.
Tänkte att det går snabbare att bit-skifta än division, men vad vet jag.
Däremot 0-15 kan jag använda direkt i min formel.
Tänkte att det går snabbare att bit-skifta än division, men vad vet jag.
- Jan Almqvist
- Inlägg: 1588
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
-
- Inlägg: 982
- Blev medlem: 2 juli 2010, 23:04:07
Re: 10 bitar till 4 bitar
Du bör nog räkna på (eller mäta) vad det är för omfång på din insignal för att vara säker på att få resultat i ett användbart intervall.
I värsta fall skulle alla invärden vara lägre än (1<<6) och du skulle bara få nollor i slutändan.
I värsta fall skulle alla invärden vara lägre än (1<<6) och du skulle bara få nollor i slutändan.
Re: 10 bitar till 4 bitar
Typ, skall du mäta på en signal 0-5V, så får du området 4,9-5 V ungefär
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: 10 bitar till 4 bitar
Han skiftar ju bara bort sex LSB så mätområdet blir det samma även om upplösningen blir 64 gånger sämre.