View Full Version : negative number calculation

Philip Verspreeuwen
01-30-2007, 02:30 AM

I have the next problem:

I'm using a gyroscope and accelerometer input. Both are a pulse width modulation signal. To see the actual difference, I substract the read value of the reference value (which is the neutral signal for both sensors). This has as result that when the sensors are turned one way, I become a value between 0 and 575. When turned the other way I get a value between 0 and -575. When using this negative value in a calculation, the BS2px sees this value as a positive value much higher then the actual value... Can anybody tell me which kind af variable I need to use? For the moment I'm using a "word", but apparently this is only able to have a positive value.



Martin Hebel
01-30-2007, 02:54 AM
Word is the right size. If you DEBUG/SEROUT, use SDEC instead of DEC.

Some math operations, such as / and // do not work on signed values.

I do this (not tested here, but gives you the idea)

b = value.bit15 ' get bit 15, 1 = negative
y = abs( value) / 20
if b= 1 then y = y * -1 ' re-apply sign


StampPlot - GUI and Plotting, and XBee Wireless Adapters (http://www.selmaware.com/)
Southern Illinois University Carbondale, Electronic Systems Technologies (http://www.siu.edu/~isat/est)

01-30-2007, 02:55 AM
Could you always add 575 to each value and work with a number from 0 to +1150?


Tom Sisk


Tracy Allen
01-30-2007, 02:57 AM
In DEBUG statements, use the SDEC modifier to see the value as signed twos complement:

Arithmetic works fine on those twos complement values for addition, subtraction and multiplication. If your algorithm needs division, you will need to use some tricks, which basically means saving the sign, doing the division using the absolute value, and then restoring the sign.

Tracy Allen
www.emesystems.com (http://www.emesystems.com)

Philip Verspreeuwen
01-30-2007, 03:16 AM
Thanks. I think I will need Martins trick.