Christopher4187
- 12th December 2012, 18:15
Trial and error led me to this code after my description just below. It works just like I need it to but there has to be a better way. The formula provided is this:
0.125*(M1*256+M2-0x0FA0)Seems simple, right? Not for me.....
So if M1=15 and M2=160 the result is 0. Both are byte variables so a rollover from M2 will increase M1 by 1. Increasing this number will provide a positive number and decreasing it will provide a negative number. In addition to the difficulty I was having with the formula, I had to account for formatting on my screen so triple digit numbers needed to be formatted differently than double digit numbers. Any comments are appreciated!
B1=256
B2=4000
MULT=125
G3T and G4T are byte sized variables
SELECT CASE G3T
CASE 15
SELECT CASE G4T
CASE IS < 160
DUMMY =MULT*((G3T*B1)+(G4T+B2))
MG2_NM = DIV32 100
MG2_NM=10000-MG2_NM
IF MG2_NM > 999 THEN
LCDOUT $FE, POS4-1,"-",DEC MG2_NM/10,".",DEC MG2_NM DIG 0
ELSE
LCDOUT $FE, POS4-1,"-",DEC MG2_NM/10,".",DEC MG2_NM DIG 0," "
ENDIF
CASE IS >= 160
MG2_NM=(G4T*125)-20000
IF MG2_NM > 9999 THEN
LCDOUT $FE,POS4-1," ",DEC MG2_NM/100,".",DEC MG2_NM DIG 0
ELSE
LCDOUT $FE,POS4-1," ",DEC MG2_NM/100,".",DEC MG2_NM DIG 0," "
ENDIF
END SELECT
CASE IS < 15
DUMMY =MULT*((G3T*B1)+(G4T+B2))' GOOD FOR NEGATIVE NM, INCLUDING ZERO
MG2_NM = DIV32 100
MG2_NM=10000-MG2_NM
IF MG2_NM > 999 THEN
LCDOUT $FE, POS4-1,"-",DEC MG2_NM/10,".",DEC MG2_NM DIG 0
ELSE
LCDOUT $FE, POS4-1,"-",DEC MG2_NM/10,".",DEC MG2_NM DIG 0," "
ENDIF
CASE ELSE
DUMMY = MULT*((G3T*B1)+(G4T-B2))
MG2_NM = DIV32 100
IF MG2_NM > 999 THEN
LCDOUT $FE,POS4-1," ",DEC MG2_NM/10,".",DEC MG2_NM//10
ELSE
LCDOUT $FE,POS4-1," ",DEC MG2_NM/10,".",DEC MG2_NM//10," "
ENDIF
END SELECT
If someone comes up with a one-line code I'm going to slit my wrists.....
I have another issue that I'm having difficulty solving. I'm viewing data that comes at a very fast rate. The number is very jumpy because it changes quickly. I know I can average it but if I average say 5 measurements, it would seem good for those five measurements but when compared with the next five measurements I would think the number would still appear jumpy. What is a good way to make a measurement look smooth? It looks like the data is sent about 90 times a second.
0.125*(M1*256+M2-0x0FA0)Seems simple, right? Not for me.....
So if M1=15 and M2=160 the result is 0. Both are byte variables so a rollover from M2 will increase M1 by 1. Increasing this number will provide a positive number and decreasing it will provide a negative number. In addition to the difficulty I was having with the formula, I had to account for formatting on my screen so triple digit numbers needed to be formatted differently than double digit numbers. Any comments are appreciated!
B1=256
B2=4000
MULT=125
G3T and G4T are byte sized variables
SELECT CASE G3T
CASE 15
SELECT CASE G4T
CASE IS < 160
DUMMY =MULT*((G3T*B1)+(G4T+B2))
MG2_NM = DIV32 100
MG2_NM=10000-MG2_NM
IF MG2_NM > 999 THEN
LCDOUT $FE, POS4-1,"-",DEC MG2_NM/10,".",DEC MG2_NM DIG 0
ELSE
LCDOUT $FE, POS4-1,"-",DEC MG2_NM/10,".",DEC MG2_NM DIG 0," "
ENDIF
CASE IS >= 160
MG2_NM=(G4T*125)-20000
IF MG2_NM > 9999 THEN
LCDOUT $FE,POS4-1," ",DEC MG2_NM/100,".",DEC MG2_NM DIG 0
ELSE
LCDOUT $FE,POS4-1," ",DEC MG2_NM/100,".",DEC MG2_NM DIG 0," "
ENDIF
END SELECT
CASE IS < 15
DUMMY =MULT*((G3T*B1)+(G4T+B2))' GOOD FOR NEGATIVE NM, INCLUDING ZERO
MG2_NM = DIV32 100
MG2_NM=10000-MG2_NM
IF MG2_NM > 999 THEN
LCDOUT $FE, POS4-1,"-",DEC MG2_NM/10,".",DEC MG2_NM DIG 0
ELSE
LCDOUT $FE, POS4-1,"-",DEC MG2_NM/10,".",DEC MG2_NM DIG 0," "
ENDIF
CASE ELSE
DUMMY = MULT*((G3T*B1)+(G4T-B2))
MG2_NM = DIV32 100
IF MG2_NM > 999 THEN
LCDOUT $FE,POS4-1," ",DEC MG2_NM/10,".",DEC MG2_NM//10
ELSE
LCDOUT $FE,POS4-1," ",DEC MG2_NM/10,".",DEC MG2_NM//10," "
ENDIF
END SELECT
If someone comes up with a one-line code I'm going to slit my wrists.....
I have another issue that I'm having difficulty solving. I'm viewing data that comes at a very fast rate. The number is very jumpy because it changes quickly. I know I can average it but if I average say 5 measurements, it would seem good for those five measurements but when compared with the next five measurements I would think the number would still appear jumpy. What is a good way to make a measurement look smooth? It looks like the data is sent about 90 times a second.