
Originally Posted by
mat janssen
Gain!
x-aSIN(B)
a is the gain.
Yup again,
But, PBP will have problems trying to multiply the negative values from the SIN function.
So you'll need to remove the sign before multiplying.
Been playing with it here. I think this program might do what you want Jon.
It's only for 1 axis, but it should get you started. There are 3 POT's in this example. AN0 is the axis input, AN1 is the Gain setting, and AN2 is a Trim setting. 10-turn 10K pots should be good for the Gain and Trim.
It uses HSEROUT to display the results in Hyperterminal.
Code:
<code><font color="#008000"><b>DEFINE </b></font><b>ADC_BITS </b><font color="#800000"><b>10
</b></font><b>ADCON1</b>.<font color="#800000"><b>7 </b></font>= <font color="#800000"><b>1 </b></font><font color="#0000FF"><b><i>; Right Justify
;ADCON2.7 = 1 ; 18F4550
</i></b></font><b>NEG </b><font color="#008000"><b>VAR BIT
</b></font><b>Temp </b><font color="#008000"><b>VAR BYTE
</b></font><b>Result </b><font color="#008000"><b>VAR WORD
</b></font><b>Xaxis </b><font color="#008000"><b>VAR WORD
</b></font><b>Xgain </b><font color="#008000"><b>VAR WORD
</b></font><b>Xtrim </b><font color="#008000"><b>VAR WORD
</b></font><b>ADvalue </b><font color="#008000"><b>VAR WORD
</b></font><b>GainAvg </b><font color="#008000"><b>VAR WORD
</b></font><b>TrimAvg </b><font color="#008000"><b>VAR WORD
</b></font><b>Avg </b><font color="#008000"><b>VAR WORD
</b></font><b>AvgCount </b><font color="#008000"><b>CON </b></font><font color="#800000"><b>16
</b></font><b>spread </b><font color="#008000"><b>CON </b></font><font color="#800000"><b>50
</b></font><b>Main</b>:
<font color="#008000"><b>ADCIN </b></font><font color="#800000"><b>0</b></font>, <b>Xaxis </b><font color="#0000FF"><b><i>; Axis input is not averaged
</i></b></font><font color="#008000"><b>ADCIN </b></font><font color="#800000"><b>1</b></font>, <b>ADvalue </b><font color="#0000FF"><b><i>; 0 = no gain, 1023 = gain 3.98
</i></b></font><b>Avg </b>= <b>GainAvg </b>: <font color="#008000"><b>GOSUB </b></font><b>Average </b><font color="#0000FF"><b><i>; Gain is averaged to stabilize it's value
</i></b></font><b>Xgain </b>= <b>Avg </b>: <b>GainAvg </b>= <b>Avg
</b><font color="#008000"><b>ADCIN </b></font><font color="#800000"><b>2</b></font>, <b>ADvalue </b><font color="#0000FF"><b><i>; 0 = adjust center -127, 1023 = adjust +128
</i></b></font><b>Avg </b>= <b>TrimAvg </b>: <font color="#008000"><b>GOSUB </b></font><b>Average </b><font color="#0000FF"><b><i>; Trim is averaged to stabilize it's value
</i></b></font><b>Xtrim </b>= <b>Avg </b>: <b>TrimAvg </b>= <b>Avg
</b><font color="#0000FF"><b><i>;--- Add Sine and Trim to the Xaxis input ------------------------------------
</i></b></font><b>Temp </b>= <font color="#008000"><b>SIN</b></font>(<b>Xaxis</b>>><font color="#800000"><b>2</b></font>)
<b>NEG </b>= <b>Temp</b>.<font color="#800000"><b>7
</b></font><b>Result </b>= <font color="#008000"><b>ABS</b></font>(<b>Temp</b>) */ <b>Xgain
</b><font color="#008000"><b>IF </b></font><b>NEG </b><font color="#008000"><b>THEN </b></font><b>Result </b>= -<b>Result
Result </b>= <b>Xaxis </b>+ <b>Result </b>+ (<b>Xtrim </b>>> <font color="#800000"><b>2 </b></font>- <font color="#800000"><b>127</b></font>)
<font color="#0000FF"><b><i>;--- Display the results in HyperTerminal ------------------------------------
</i></b></font><font color="#008000"><b>HSEROUT </b></font>[<font color="#800000"><b>27</b></font>,<font color="#FF0000">"[H"</font>,<font color="#FF0000">"Xaxis = "</font>,<font color="#008000"><b>DEC </b></font><b>Xaxis</b>,<font color="#FF0000">" "</font>,<font color="#800000"><b>13</b></font>,<font color="#800000"><b>10</b></font>, <b>_
</b><font color="#FF0000">"Xgain = "</font>,<font color="#008000"><b>DEC </b></font><b>Xgain</b>>><font color="#800000"><b>8</b></font>,<font color="#FF0000">"."</font>,<font color="#008000"><b>DEC2 </b></font>((<b>Xgain </b>& <font color="#800000"><b>$0FF</b></font>) */ <font color="#800000"><b>100</b></font>),<font color="#FF0000">" "</font>,<font color="#800000"><b>13</b></font>,<font color="#800000"><b>10</b></font>, <b>_
</b><font color="#FF0000">"Xtrim = "</font>,<font color="#008000"><b>SDEC </b></font>(<b>Xtrim </b>>> <font color="#800000"><b>2 </b></font>- <font color="#800000"><b>127</b></font>),<font color="#FF0000">" "</font>,<font color="#800000"><b>13</b></font>,<font color="#800000"><b>10</b></font>, <b>_
</b><font color="#FF0000">"Result= "</font>,<font color="#008000"><b>SDEC </b></font><b>Result</b>,<font color="#FF0000">" "</font>,<font color="#800000"><b>13</b></font>,<font color="#800000"><b>10</b></font>]
<font color="#008000"><b>PAUSE </b></font><font color="#800000"><b>100
</b></font><font color="#008000"><b>GOTO </b></font><b>Main
</b><font color="#0000FF"><b><i>' -=-=-=-=-=-= Average Analog values -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
</i></b></font><b>Average</b>: <font color="#0000FF"><b><i>' Smooth data
</i></b></font><font color="#008000"><b>IF ABS </b></font>(<b>ADvalue </b>- <b>Avg</b>) > <b>spread </b><font color="#008000"><b>THEN
</b></font><b>Avg </b>= <b>ADvalue
</b><font color="#008000"><b>ELSE
</b></font><b>Avg </b>= (<b>Avg</b>*(<b>AvgCount</b>-<font color="#800000"><b>1</b></font>)+<b>ADvalue</b>)/<b>AvgCount
</b><font color="#008000"><b>ENDIF
RETURN
</b></font>
The output in Hyperterminal should look like this ... (in real time)

HTH,
Bookmarks