Mmmasa Posted September 14, 2009 Report Posted September 14, 2009 Hi! I'd like to add a pot calibration feature to my project. When a pot is turned to max position (1023 or less if smaller operation range for pot is wanted), the MAX value is stored. Also MIN value (0 or whatever the value is) is stored. Then after the calibration, A/D conversion values between MAX and MIN scaled to 0-127. Is this possible in assembler?
TK. Posted September 14, 2009 Report Posted September 14, 2009 Hi,it's difficult, but not impossible.Basically the formula is: (128 * (POT_VALUE-MIN))/(MAX-MIN)This has to be calculated in fixed point arithmetic.Let's check the required value range for the worst case (MIN=0, MAX=1023, POT_VALUE=1023):dividend: 128*(1023-0)) = 130944 (thats a 17 bit value)divisor: (1023-0) = 1023 (thats a 10 bit value)To calculate the dividend, a multiplication with 128 is required. This can be done by leftshifting (POT_VALUE-MIN) 7 times. In addition, we have a 16bit substraction.The divisor has to be calculated with a 16bit substraction as well.The divison will be 24/16 bitI've an example here: http://svnmios.midibox.org/filedetails.php?repname=svn.mios&path=%2Ftrunk%2Fapps%2Fsynthesizers%2Fmidibox_sid_v2%2Fsrc%2Fmath_div24_16.incIn the MBSID source code you will also find many examples for a 16bit substraction and for leftshifting values if required (I don't know your knowledge level, unfortunately you forgot to introduce yourself!)Best Regards, Thorsten.
Mmmasa Posted September 15, 2009 Author Report Posted September 15, 2009 Thank you for your answer! That looks difficult indeed, but I'll study this method and see if I have enough skills. Actually I had some thoughts that apparently went to the right direction, but I couldn't build up any formula to do this. I've been programming pics in assembly for a year now, and I have learned a lot.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now