How can I convert from Q3.5 format to decimal using an 8-bit microcontroller?

  • Thread starter Thread starter PhantomPower
  • Start date Start date
  • Tags Tags
    Fixed point Point
Click For Summary
The discussion focuses on converting a number from unsigned Q3.5 format to an 8-bit representation for display in decimal on an 8-bit microcontroller. The example given is the binary number 011.11010, which should convert to the decimal value 3.8125. The conversion process involves understanding binary fractions, where the fractional part is calculated using powers of 2. Specifically, the binary fraction .11010 is broken down to yield 0.8125. A suggestion is made to use a lookup table with 32 elements to simplify the conversion of the 5-bit fractional part. The original poster later clarifies their approach, stating they can store the value in a 4-byte integer, apply bit masking to isolate the fractional bits, and then perform the necessary multiplication and division to obtain the final decimal representation.
PhantomPower
Messages
14
Reaction score
0
Hello,

I am currently trying to figure out if its possible to go from a number in (unsigned) Q3.5 format -> 8 bits given.

And print it on a display in decimal.

I only have a 8 bit microcontroller to work with.

For example 011.11010 should have 3.8125

Getting to 3 is easy but I can't see how I could get 8125 - I know I need to divide the 26 by 2^5 but this would give me 0 as an inside an 8 bit microcontroller.

Any tips - Or some C source code would be lovely.
Thanks in advance.
 
Technology news on Phys.org
PhantomPower said:
Hello,

I am currently trying to figure out if its possible to go from a number in (unsigned) Q3.5 format -> 8 bits given.

And print it on a display in decimal.

I only have a 8 bit microcontroller to work with.

For example 011.11010 should have 3.8125

Getting to 3 is easy but I can't see how I could get 8125 - I know I need to divide the 26 by 2^5 but this would give me 0 as an inside an 8 bit microcontroller.
The part of your number to the right of the 'binary' point is a binary fraction.

.11010 means 1 * 2-1 + 1 * 22 + 0 * 2-3 + 1 * 2-4 + 0 * 2-5
= 1/2 + 1/4 + 0/8 + 1/16 + 0/32
= 13/16
= .8125

Please excuse me if you already know this. At first I thought you didn't, because of what you said about 26. I then realized that you were adding the bits, and didn't realize that you were representing the fraction as 26/32, which is the same as 13/16.

Binary fractions work exactly like decimal fractions except that instead of having decreasing negative powers of 10, you have decreasing negative powers of 2.
PhantomPower said:
Any tips - Or some C source code would be lovely.
Thanks in advance.

I recommend using a lookup table. The table (an array) should have 32 elements, one for each possible value of a 5 bit number. Each element in the table is a string of decimal digits.

Index the table by the sum of the 5 bits.
 
Hey, thanks for the reply.

Yeah I figure out how to get the conversions - Sorry about my ambigous language.

Figured out if I store it in a int (4 bytes) then I can bit mask to get the 5 bits representing the fractional - then multiply by 100000 and divide by 2^5 giving me the fractional bits without the point.

Thanks
 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

Replies
4
Views
2K
  • · Replies 7 ·
Replies
7
Views
2K
  • Sticky
  • · Replies 13 ·
Replies
13
Views
7K
  • · Replies 34 ·
2
Replies
34
Views
22K
  • · Replies 8 ·
Replies
8
Views
2K
Replies
11
Views
2K
  • · Replies 3 ·
Replies
3
Views
11K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 7 ·
Replies
7
Views
8K
  • · Replies 5 ·
Replies
5
Views
3K