Sida 1 av 2
10 bitar till 4 bitar
Postat: 2 mars 2018, 21:58:13
av Magnus_K
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;?
Re: 10 bitar till 4 bitar
Postat: 2 mars 2018, 22:00:21
av AndLi
Ja...
Re: 10 bitar till 4 bitar
Postat: 2 mars 2018, 22:03:29
av Magnus_K
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?
Re: 10 bitar till 4 bitar
Postat: 2 mars 2018, 22:39:09
av Klas-Kenny
Brukar i såna lägen köra
var=(var>>6) & 0xf;
Så är man 100% säker på vad man får.
Re: 10 bitar till 4 bitar
Postat: 2 mars 2018, 22:46:23
av Magnus_K
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.
Re: 10 bitar till 4 bitar
Postat: 2 mars 2018, 23:04:02
av lillahuset
Kolla så din ADC ger "unsigned" ut, dvs 0..1023. Ger den "signed" ut, dvs -512..511 blir det lite mer pill.
Re: 10 bitar till 4 bitar
Postat: 2 mars 2018, 23:05:40
av XorXaX
0xf är bara fyra ettor precis som du ville ha det.
.
Re: 10 bitar till 4 bitar
Postat: 2 mars 2018, 23:22:13
av Magnus_K
@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!
Re: 10 bitar till 4 bitar
Postat: 3 mars 2018, 08:20:43
av TomasL
Varför vill du skala till fyra bitar?
Re: 10 bitar till 4 bitar
Postat: 3 mars 2018, 12:09:45
av Magnus_K
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.
Re: 10 bitar till 4 bitar
Postat: 3 mars 2018, 12:18:27
av Jan Almqvist
Hur ser din formel ut?
Re: 10 bitar till 4 bitar
Postat: 3 mars 2018, 19:09:01
av Findecanor
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.
Re: 10 bitar till 4 bitar
Postat: 3 mars 2018, 23:26:38
av TomasL
Typ, skall du mäta på en signal 0-5V, så får du området 4,9-5 V ungefär
Re: 10 bitar till 4 bitar
Postat: 3 mars 2018, 23:35:49
av lillahuset
Han skiftar ju bara bort sex LSB så mätområdet blir det samma även om upplösningen blir 64 gånger sämre.
Re: 10 bitar till 4 bitar
Postat: 3 mars 2018, 23:42:36
av TomasL
Ja mitåt, för mycket rö-tjut i kväll.