
Originally Posted by
RFsolution
Hi All,
I'm trying to convert a 10bit or 12bit word "position" to 0-360 degrees with 2 or 3 digits after the decimal point
I have this routine working for conversion to degrees without decimal point
anyone who can help me with this mathematics:
Scale = 1024 (might also be 4098 for 12bit)
dummy = position * 64
dummy = dummy *360
result_64 = DIV32 scale
degrees = result_64/64
thanks
This might get you 2 behind the point...
Code:
scale = 1024
dummy = position << 6'wont overflow 16 bits, same as *64 but quicker
dummy = dummy * 360 'will overflow 16 bits
result_high = div32 scale 'but doesnt matter here
degrees_whole = result_high >> 6 'same as divide by 64 but quicker
scale = 1024
dummy = position << 6 'wont overflow 16 bits, same as *64 but quicker
dummy = dummy * 36000 'will overflow 16 bits
result_low = div32 scale 'again, doesnt matter here
degrees_fraction = result_low >> 6 'same as divide by 64 but quicker
degrees_fraction = degrees_fraction // 100 'take out the -whole- degrees and leave the fraction
lcdout $fe , 1 , "Degrees:" , DEC3 degrees_whole , ":" , DEC2 degrees_fraction
This should work for a 10 bit ADC, but for a 12 bit ADC, the 2nd chunk will overflow. Changing the 36000 to 3600 and 100 to 10 should let the 2nd chunk work with one digit behind the decimal point, or change 36000 to 9000 and 100 to 25 and you'll get 2 digits behind the decimal point but in steps of .04
And upgrade to PBP 2.50b
Bookmarks