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
SUMMARY

This discussion focuses on converting numbers from unsigned Q3.5 format to decimal using an 8-bit microcontroller. The conversion involves understanding binary fractions, specifically how to interpret the bits to derive decimal values. The key takeaway is that the fractional part can be calculated by summing the contributions of each bit, leading to a final value of 3.8125 for the example 011.11010. A recommended approach is to use a lookup table with 32 elements to facilitate the conversion of the 5-bit fractional representation.

PREREQUISITES
  • Understanding of Q3.5 format and binary fractions
  • Familiarity with 8-bit microcontroller programming
  • Knowledge of C programming language
  • Basic concepts of bit masking and integer storage
NEXT STEPS
  • Implement a lookup table for Q3.5 to decimal conversion in C
  • Explore bit masking techniques for extracting fractional bits
  • Research fixed-point arithmetic in embedded systems
  • Learn about optimizing memory usage in 8-bit microcontrollers
USEFUL FOR

Embedded systems developers, microcontroller programmers, and anyone working with fixed-point arithmetic in low-level programming environments.

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
 

Similar threads

Replies
4
Views
2K
  • · Replies 7 ·
Replies
7
Views
2K
  • Sticky
  • · Replies 13 ·
Replies
13
Views
8K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 34 ·
2
Replies
34
Views
22K
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