Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

Lookup table 0-255 converting to 0-100(%)

Status
Not open for further replies.

dr pepper

Well-Known Member
Most Helpful Member
I've been looking for a 255 element lookup table so I can convert an 8 bit value 0-255 to a percentage 0-100%.
If anyone has any links, I'd rather not work this out and type every line in.
 
You probably do not need a lookup table for this opeartion.

Do the following:

1) multiply the original value by 100. You'll ge 16-bit result.
2) if your orignal value was above 127 (you can check high bit), add 228 to the result, otherwise add 128.
3) take the high byte of the result.
 
I've been looking for a 255 element lookup table so I can convert an 8 bit value 0-255 to a percentage 0-100%.
If anyone has any links, I'd rather not work this out and type every line in.
If you do not care about efficiency and have a good compiler then use:
((float)x / 255.0) * 100.0;

Using a table look-up for that would be kind of redundant.
 
Note that there are 256 entries in a table that spans 0-255. The following is simply floor(i / 2.55) and is readily created using the a spreadsheet with that formula.
Code:
uint8_t percent[256]={0,0,0,1,1,1,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,10,10,10,11,11,12,12,12,13,13,14,14,14,15,15,16,16,16,17,17,18,18,18,19,19,20,20,20,21,21,21,22,22,23,23,23,24,24,25,25,25,26,26,27,27,27,28,28,29,29,29,30,30,30,31,31,32,32,32,33,33,34,34,34,35,35,36,36,36,37,37,38,38,38,39,39,40,40,40,41,41,41,42,42,43,43,43,44,44,45,45,45,46,46,47,47,47,48,48,49,49,49,50,50,50,51,51,52,52,52,53,53,54,54,54,55,55,56,56,56,57,57,58,58,58,59,59,60,60,60,61,61,61,62,62,63,63,63,64,64,65,65,65,66,66,67,67,67,68,68,69,69,69,70,70,70,71,71,72,72,72,73,73,74,74,74,75,75,76,76,76,77,77,78,78,78,79,79,80,80,80,81,81,81,82,82,83,83,83,84,84,85,85,85,86,86,87,87,87,88,88,89,89,89,90,90,90,91,91,92,92,92,93,93,94,94,94,95,95,96,96,96,97,97,98,98,98,99,99,100};
The following is simply round(i / 2.55)
Code:
uint8_t percent[256]={0,0,1,1,2,2,2,3,3,4,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,10,10,11,11,11,12,12,13,13,13,14,14,15,15,15,16,16,16,17,17,18,18,18,19,19,20,20,20,21,21,22,22,22,23,23,24,24,24,25,25,25,26,26,27,27,27,28,28,29,29,29,30,30,31,31,31,32,32,33,33,33,34,34,35,35,35,36,36,36,37,37,38,38,38,39,39,40,40,40,41,41,42,42,42,43,43,44,44,44,45,45,45,46,46,47,47,47,48,48,49,49,49,50,50,51,51,51,52,52,53,53,53,54,54,55,55,55,56,56,56,57,57,58,58,58,59,59,60,60,60,61,61,62,62,62,63,63,64,64,64,65,65,65,66,66,67,67,67,68,68,69,69,69,70,70,71,71,71,72,72,73,73,73,74,74,75,75,75,76,76,76,77,77,78,78,78,79,79,80,80,80,81,81,82,82,82,83,83,84,84,84,85,85,85,86,86,87,87,87,88,88,89,89,89,90,90,91,91,91,92,92,93,93,93,94,94,95,95,95,96,96,96,97,97,98,98,98,99,99,100,100};
 
Last edited:
Shouldn't it be round(i/2.55)?
Depends what you're after. While floor is accurate to 1% and round is accurate to 0.5%, round gives 100% at both 254 and 255, which is probably not desirable (I guess you could just change percent[254] to 99).
 
Depends what you're after. While floor is accurate to 1% and round is accurate to 0.5%, round gives 100% at both 254 and 255, which is probably not desirable (I guess you could just change percent[254] to 99).

How's 100 for 254 is undesirable, but 3 zeroes for 0, 1, and 2 are desirable?

If it's undesirable, one should go to higher precision, say 0.1%, which will not fit into 8 bits. Although we don't really know what precision is required.
 
I would just use,

Percent = (ADCresult*100+128)/256

This can be done in assembly quite efficiently if needs be.

Mike.
 
Thanks dougy, I have cut and pasted what I need from that.
I have to bore the heck out of myself with spreadsheets every day, because of that I'm hopeless with them.
 
Maybe you should learn how to use them efficiently so that they are more enjoyable and less boring (or at least boring for less time).

I use them all the time to tweak values in equations, or just as a better calculator than windows calc.
 
Yes your probably right.

I have included the lookup table and assembled the code, it works fine.

Thanks for the help.
 
Status
Not open for further replies.

Latest threads

Back
Top